python Tornado框架 入門:一

  • Tornado介紹

Tornado 是一個Python web框架和異步網絡庫 起初由 FriendFeed 開發. 通過使用非阻塞網絡I/O, Tornado 可以支持上萬級的連接,處理 長連接, WebSockets, 和其他 需要與每個用戶保持長久連接的應用.

Tornado 大體上可以被分爲4個主要的部分:

  • web框架 (包括創建web應用的 RequestHandler 類,還有很多其他支持的類).
  • HTTP的客戶端和服務端實現 (HTTPServer and AsyncHTTPClient).
  • 異步網絡庫 (IOLoop and IOStream), 爲HTTP組件提供構建模塊,也可以用來實現其他協議.
  • 協程庫 (tornado.gen) 允許異步代碼寫的更直接而不用鏈式回調的方式.

Tornado web 框架和HTTP server 一起爲 WSGI 提供了一個全棧式的選擇. 在WSGI容器 (WSGIAdapter) 中使用Tornado web框架或者使用Tornado HTTP server 作爲一個其他WSGI框架(WSGIContainer)的容器,這樣的組合方式都是有侷限性的. 爲了充分利用Tornado的特性,你需要一起使用Tornado的web框架和HTTP server.

  • 安裝

    pip install tornado

 

  • Tornado web應用的結構

    通常一個Tornado web應用包括一個或者多個 RequestHandler 子類, 一個可以將收到的請求路由到對應handler的 Application 對象,和 一個啓動服務的 main() 函數.

 

  • Application 對象

    • Application 對象是負責全局配置的, 包括映射請求轉發給處理程序的路由 表.
      路由表是 URLSpec 對象(或元組)的列表, 其中每個都包含(至少)一個正則 表達式和一個處理類. 順序問題; 第一個匹配的規則會被使用. 如果正則表達 式包含捕獲組, 這些組會被作爲 路徑參數 傳遞給處理函數的HTTP方法. 如果一個字典作爲 URLSpec 的第三個參數被傳遞, 它會作爲 初始參數 傳遞給 RequestHandler.initialize. 最後 URLSpec 可能有一個名字 , 這將允許它被 RequestHandler.reverse_url 使用.

 

  • RequestHandler 子類

    • Tornado web 應用程序的大部分工作是在 RequestHandler 子類下完成的. 處理子類的主入口點是一個命名爲處理HTTP方法的函數: get(), post(), 等等. 每個處理程序可以定義一個或者多個這種方法來處理不同 的HTTP動作. 如上所述, 這些方法將被匹配路由規則的捕獲組對應的參數調用.
    • 在處理程序中, 調用方法如 RequestHandler.render 或者 RequestHandler.write 產生一個響應. render() 通過名字加載一個 Template 並使用給定的參數渲染它. write() 被用於非模板基礎的輸 出; 它接受字符串, 字節, 和字典(字典會被編碼成JSON).
    • 在 RequestHandler 中的很多方法的設計是爲了在子類中複寫和在整個應用 中使用. 常用的方法是定義一個 BaseHandler 類, 複寫一些方法例如 write_error 和 get_current_user 然後子類繼承使用你自己的 BaseHandler 而不是 RequestHandler 在你所有具體的處理程序中.

 

  • hello world”案例:

     

    import tornado.ioloop
    import tornado.web
    
    class MainHandler(tornado.web.RequestHandler):
            def get(self):
                    self.write("Hello, world。你好世界!!!")
    
    class Index(tornado.web.RequestHandler):
            def get(self):
                    self.write("這是一個首頁")
    
    class Redirect(tornado.web.RequestHandler):
            def get(self):
                    '''重定向'''
                    # self.redirect(r"/")   # 重定向到根目錄
                    self.redirect(r"http://baidu.com")  # 重定向到百度
    
    class Error(tornado.web.RequestHandler):
            def get(self):
                    '''設置網頁狀態500'''
                    self.set_status(500)   # 頁面返回500狀態
    
    class Pic(tornado.web.RequestHandler):
            def get(self):
                    '''圖片'''
                    self.write('<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1688631197,3554659657&fm=27&gp=0.jpg">')
    
    def make_app():
            '''
                 tornado.web.Application([(網址1),(網址2)])  根據路徑修改網址內容
                 debug=True   報告異常信息
                 write_error(參數1:錯誤頁,參數2:錯誤異常提示消息)   異常處理
                 set_status(狀態信息)    設置響應狀態信息
                 redirect()  重定向處理
                 get_current_user()  獲取用戶信息進行用戶驗證
                 異步處理:
                    方式一:裝飾器
                    方式二:異步調用
    
                 '''
            return tornado.web.Application([
                    (r"/", MainHandler),
                    (r"/index", Index),
                    (r"/redirect", Redirect),
                    (r"/error", Error),
                    (r"/pic", Pic),
            ],
            debug=True)     #'debug=True 作用:代碼有更新時 自動重啓
    
    if __name__ == "__main__":
            app = make_app()
            app.listen(8888)
            tornado.ioloop.IOLoop.current().start()
  • 運行上面代碼 訪問如圖地址

    可以看見會根據Application裏定義的路徑調用路徑

 
 

python  Tornado框架  入門:一
 
 

python  Tornado框架  入門:一
 
 

python  Tornado框架  入門:一

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章