トルネードラーニング(II)

私たちは、目の前にある  トルネード  組織独自のコードハロー世界を説明したが、これ以上の深い詳細な説明。ここでは()関数は、シングルステップに続いて、メインから直接起動して、乾燥竜巻かを確認します。

以下は、main()関数の定義は次のとおりです。

コードをコピー
1 DEFメイン():
2 tornado.options.parse_command_line()
3アプリケーション= tornado.web.Application([ 
4(R "/"、MainHandler)、
5])
6 HTTP_Serverの= tornado.httpserver.HTTPServer(アプリケーション)
7 HTTP_Serverの.listen(options.port)
8 tornado.ioloop.IOLoop.instance()。)(開始
コードをコピー

最初の行で開始します。

1 tornado.options.parse_command_line()

この文は、解析コマンドラインパラメータであり、機能が竜巻/ options.py年に定義されています。()の定義でoptions.pyで2 parse_command_lineがあることに注意してください。これは、クラスのメンバ関数はOptionParserです:

1クラスはOptionParser(オブジェクト):
2 DEF parse_command_line(自己、引数=なし、最終= TRUE)。

もう一つは、通常の関数であるが、その実装はのOptionParserを達成するための直接呼び出しです。

1デフparse_command_line(引数=なし、最終= TRUE):
2戻りoptions.parse_command_line(最終=最終引数)

直接の実現はOptionParserに見えます。短いコメント、パラメータ解析parse_command_line()sys.argvのデフォルト。私たちは、helloworld.pyを実行すると、パラメータを持つの後ろには、ここで処理されます。コマンドラインパラメータの解析は、特別な注意が必要でない、非常に簡単です。さらに、我々はそれをスキップし、任意のコマンドライン引数を使用しません。

次へ:

1つのアプリケーション= tornado.web.Application([ 
2(R "/"、MainHandler)])

この1は簡単ですが、情報の少し大きめの量。まず、tornado.web.Application竜巻は、ビルトインクラス、竜巻/ web.py内に定義されているのです。それの大部分からのノートは、少なくともこのクラスM IIに見ることができます。竜巻の文では、Application Handlerクラスは、Webアプリケーションまで、これらのハンドラメイクのいくつかのコレクションです。

ハンドラそれは何ですか?

ユーザーの訪問あなたのサイトに、そのようなhttp://abc.com /1.htmとして、「私には、このアドレスのデータ」という、このURLは、Webページであってもよいし、URLを提出するとき、それはAかもしれこのようhttp://abc.com/2.jpgとして絵、。データをレンダリングブラウザに転送された後、それは我々がWebサイトを参照してください方法です。それぞれのそのようなURLのために、そして竜巻がハンドルに機能を提供標的とすることができます。()関数の呼び出しhandle_2_jpgに//abc.com/2.jpg:たとえば、私たちはhttp://abc.com/1.htmは、関数と呼ばれるのhandle_1_htm()、HTTPを与えます。彼らは、httpプロトコルを介してクライアントにクライアント要求の背中の内容に責任があります。これらの機能は、ハンドラーと呼ばれます。

通常の静的にhttpと比較すると、このハンドラのメカニズムは、より多くの柔軟性を提供します。例えば、可能1.htmはデータベースに応じて動的にコンテンツを生成し、ユーザー・プロファイルに戻すたびには、それぞれ異なっていることができます。別の例:そのようなファイルを2.JPGないかもしれませんが、サーバー上に存在する、handle_2_jpg()関数は、実際には、ユーザーに返されたマップに接続されたサーバからのシュートカメラヘッドです。竜巻の開発現場では、作業の大半は、そのような中で書かれている  ハンドラ

このいずれかの上に、アプリケーションが変数に格納され、アプリケーションのインスタンスを初期化することです。

アプリケーションの初期化パラメータは、非常に豪華です。Applicationクラスの説明では、パラメータの大部分の言葉は、物事について話しています。

パラメータの比較的簡単な例:

1つのアプリケーション= tornado.web.Application([(R "/"、MainHandler)])

私たちは、__init__関数がApplicatinoクラスのプロトタイプを見て:

1デフ__init __(自己、ハンドラ=なし、のdefault_host = ""、変換=なし、WSGI = Falseを、**の設定): 

可視Helloword.pyのみ、このパラメータのハンドラ値を提供します。ハンドラが実際にリスト、各要素(正規表現、tornado.web.RequestHandler)このタプルです。ユーザと要求ハンドラの間のマッピング関係があることをリコールは、この関連付けは、本明細書で定義されています。

1(R "/"、MainHandler)

ユーザーがWebサイトのルートディレクトリを要求した場合、対処するMainHandlerを呼び出すことをこれが意味。以前の私たちの直接入力http://127.0.0.1:8888は、実際には、rootアクセスは、我々は、ハローワールド出力がMainHandlerにより出力される参照してください。その後、詳細な分析MainHandlerが続きます。

我々は(例えばhttp://127.0.0.1/1.htmなど)URLハンドラの定義にアクセスしない場合はどうなりますか?

非常にシンプルな、あなたが見つけることができません教えて!その後の実験では、

1つのアプリケーション= tornado.web.Application([(R "/"、MainHandler)])

読みます:

1つのアプリケーション= tornado.web.Application([(R "/hello\.htm"、MainHandler)]) 

それは正規表現であるので、我々は、ドットの前にバックスラッシュを追加したので、注意してください。そして、404になり、アクセスhttp://127.0.0.1:8888にしてみてください。

言い換えれば、我々はURLを裏返しは、http://127.0.0.1:8888 / hello.htm、素敵な "Hello World" のバックです。

今、あなたはそれが起こるどのようにハンドラを理解する必要があります。

それが私たちを連想させると同時に、ブラウザのアドレスバーのURLは、必ずしもサーバ上にそのようなファイルが実際に存在することを意味するものではありません。これは、そのWebサーバーの仮想パスマッピングだけで完全に可能です。例えば、ちょうどhello.htm。

ので、これはハロー世界レベルなので、一つだけのハンドラ、および非常に単純な例です。

 

おすすめ

転載: www.cnblogs.com/wangzhilong/p/12549455.html