Tornado初めて知った

4426 ワード

Python web第二の重要なフレーム、tonado公式中国語文書(http://tornado-zh.readthedocs.io/zh/latest/guide.html)
tonadoの特徴:機能は少ないですが、非常に精巧なwebフレームです。高機能を両立させ、非同期でIOをブロックせず、websocketを長く接続し、高機能のHTTPサーバを内蔵しています。
1.据え付け
  pip install tornado   tornado  
  #tornado       windows   ,          linux     .
2.トラナドプロジェクトの作成
注意:tonado webプログラムは、Djangoのように自動的にプロジェクト構造を生成するのではなく、プログラミング手順に注意してください。
  • 第一:必要なモジュールを導入する
       from tornado.web import Application , RequestHandler
       form tornado.ioloop import IOLoop
    
  • Request Handler:tonadoウェブフレームのコアの1つの処理クラスは、主にユーザ要求オブジェクトの処理を行う。
  • Appplication:tonado webフレームの中核となる処理類は、主にwebアプリケーションの包装を行う。
  • IOLoop:tonado webサーバのコア処理クラスは、主にポーリング傍受要求を行う。
  • 第二に、開発ビュー処理クラスはRequest Handlerを引き継ぎ、異なる要求方式を処理するために、親クラスの要求処理方法を書き換える必要がある。
        #          
        class IndexHandler(RequestHandler):
             #       get     
             def  get(self):
                  #   self.write()            
                  self.write(“hello tornado!”)
    
  • 第3:ウェブアプリケーションを構築し、サーバ
        #        
        if __name__ == "__main__":
              #            web application
              app = Application(
                  [
                         #        
                         (r’/’, IndexHandler),
                  ]
              )
              #     
              app.listen(8000)
              #   tornado           
              IOLoop.current().start()
    
  • を起動する。
    この時点で最も基本的なtonadoプロジェクトの作成に成功しました。この時に様々な機能が豊富な項目を追加することができます。
  • 第4回:内蔵サーバ
        #             
        from tornado.httpserver import HTTPServer
           ......
           #     APP       ,       
           server = HTTPServer(app)
           server.listen(8000)
    
    の追加
  • tonado標準プロセス
        #  web application    Server 
        server = HTTPServer(app)
        server.bind(8000)#   8000  
        server.start() #      ,            1,    1   
        #           0,                   
        #        0   ,           
    
  • 第五:その他の操作
  • プログラムで定義された変数
        # define    ;options    
        from tornado.options import define, options
    
        #       ,      
        define("port", default=8000, type=int, help="      8000")
        #      :options.port
        server.bind(options.port)
    
  • アプリケーションは、コマンドラインパラメータ
        #       
        from tornado.options import define, options, parse_command_line
    
        #     
        define("port", default=8000, help="  8000,   --port=9000   ")
        #             
        if __name__ == "__main__":
             #              ~        ,     define  
             parse_command_line()
             #                python demo01.py --port=8000 
    
  • を受け取ります。
  • ハンドメイド多プロセス
        #               
        #     web    ,         
        python demo.py --port=8000    8000              
        python demo.py --port=9000    9000              
        #        
        #web                     
        #  :       ~            [3     ]
        #  1   ~    ~      [  2       ,
        #         ~                     ]
    
  • ウェブページと静的リソースを設定します。debug
        #    
        import os
        BASE_DIR=os.path.dirname(__file__)
        app = Application(
                ......
              #     ,  tornado               
              template_path=os.path.join(BASE_DIR, "templates"),
              #     ,  tornado                
              static_path=os.path.join(BASE_DIR, "static"),
              # debug  ~  True,       False,        
              debug=True,
        )
    
  • get/postパラメータ処理[フォーム処理]及びテンプレート文法
        # get post       
        def get(self):
             # get         
             name = self.get_query_argument("name")
             fav = self.get_query_arguments("fav")
    
        def post(self):
             # post         
             account = self.get_body_argument("account")
             fav = self.get_body_arguments("fav")
    
        #        
        name = self.get_argument("name")
        fav = self.get_arguments("fav")
    
        #    
        user = {"name": name}
        self.render("index.html", user=user)
    
        #    ,jinjia2
        {% if books %}
        {% else %}
        {% end %}
    
        {% for book in books%}
          :{{book['name']}}
          :{{book['price']}}
          :{{book['buycount']}}
          :{{book['price'] * book['buycount']}} #    ,    empty
        {% end %}