Tornado 是一個Python web框架和異步網絡庫 起初由 FriendFeed 開發. 經過使用非阻塞網絡I/O, Tornado 能夠支持上萬級的鏈接,處理 長鏈接, WebSockets, 和其餘 須要與每一個用戶保持長久鏈接的應用.python
- web框架 (包括建立web應用的 RequestHandler 類,還有不少其餘支持的類).
- HTTP的客戶端和服務端實現 (HTTPServer and AsyncHTTPClient).
- 異步網絡庫 (IOLoop and IOStream), 爲HTTP組件提供構建模塊,也能夠用來實現其餘協議.
- 協程庫 (tornado.gen) 容許異步代碼寫的更直接而不用鏈式回調的方式.
pip install tornado
- Application 對象是負責全局配置的, 包括映射請求轉發給處理程序的路由 表.
路由表是 URLSpec 對象(或元組)的列表, 其中每一個都包含(至少)一個正則 表達式和一個處理類. 順序問題; 第一個匹配的規則會被使用. 若是正則表達 式包含捕獲組, 這些組會被做爲 路徑參數 傳遞給處理函數的HTTP方法. 若是一個字典做爲 URLSpec 的第三個參數被傳遞, 它會做爲 初始參數 傳遞給 RequestHandler.initialize. 最後 URLSpec 可能有一個名字 , 這將容許它被 RequestHandler.reverse_url 使用.
- Tornado web 應用程序的大部分工做是在 RequestHandler 子類下完成的. 處理子類的主入口點是一個命名爲處理HTTP方法的函數: get(), post(), 等等. 每一個處理程序能夠定義一個或者多個這種方法來處理不一樣 的HTTP動做. 如上所述, 這些方法將被匹配路由規則的捕獲組對應的參數調用.
- 在處理程序中, 調用方法如 RequestHandler.render 或者 RequestHandler.write 產生一個響應. render() 經過名字加載一個 Template 並使用給定的參數渲染它. write() 被用於非模板基礎的輸 出; 它接受字符串, 字節, 和字典(字典會被編碼成JSON).
- 在 RequestHandler 中的不少方法的設計是爲了在子類中複寫和在整個應用 中使用. 經常使用的方法是定義一個 BaseHandler 類, 複寫一些方法例如 write_error 和 get_current_user 而後子類繼承使用你本身的 BaseHandler 而不是 RequestHandler 在你全部具體的處理程序中.
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裏定義的路徑調用路徑