Python Tornado簡介
阿新 • • 發佈:2018-08-04
import 有客 構造函數 建模 指定 span 網址 eth port , 即完成一次http請求和響應。
Tornado安裝
pip3 install tornado
初識Tornado
首先打開pycharm,新建一個幹凈的project
新建一個py文件:
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): # 類似於Django裏面的CBV def get(self): # get方法 self.write("Hello, world") application = tornado.web.Application([ #app.py類似於Django裏面的路由系統 (r"/index", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start() # 啟動
運行文件並打開瀏覽器訪問網址:
運行該腳本,依次執行:
- 創建一個Application對象,並把一個正則表達式‘/‘和類名MainHandler傳入構造函數:tornado.web.Application(...)
- 執行Application對象的listen(...)方法,即:application.listen(8888)
- 執行IOLoop類的類的 start() 方法,即:tornado.ioloop.IOLoop.instance().start()
整個過程其實就是在創建一個socket服務端並監聽8888端口,當請求到來時,根據請求中的url和請求方式(post、get或put等)來指定相應的類中的方法來處理本次請求,在上述demo中只為url為http://127.0.0.1:8888/index的請求指定了處理類MainHandler(具體如何尋找見下文)。所以,在瀏覽器上訪問:http://127.0.0.1:8888/index,則服務器給瀏覽器就會返回 Hello,world ,否則返回 404: Not Found(tornado內部定義的值)
由上述分析,我們將整個Web框架分為兩大部分:
- 待請求階段,即:創建服務端socket並監聽端口
- 處理請求階段,即:當有客戶端連接時,接受請求,並根據請求的不同做出相應的相應
經典的Login案例
首先,創建模版文件夾和模版文件:
login.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="POST" action="/login"> <input type="text" name="username" /> <input type="submit" value="提交" /> </form> </body> </html>
新建一個路由:
(r"/login", LoginHandler),
新建CBV:
class LoginHandler(tornado.web.RequestHandler): def get(self): self.render("login.html") def post(self, *args, **kwargs): # 獲取url中以GET形式傳遞的數據 self.get_query_argument() self.get_query_arguments() # 去請求體中獲取傳遞的數據 self.get_body_argument() self.get_body_arguments() # 去get&post雙方去取數據 user = self.get_argument(‘username‘) print(user) self.redirect(‘www.baidu.com‘)
註冊模版文件路徑:
# 申明settings,字典格式 settings = { ‘template_path‘: ‘tmp‘ } # 註冊進tornado內部 application = tornado.web.Application([ (r"/index", MainHandler), (r"/login", LoginHandler), ], **settings)
整體app文件:
#!/usr/bin/env python3 # encoding: utf-8 # Author: Dandy import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class LoginHandler(tornado.web.RequestHandler): def get(self): self.render("login.html") def post(self, *args, **kwargs): # 獲取url中以GET形式傳遞的數據 self.get_query_argument() self.get_query_arguments() # 去請求體中獲取傳遞的數據 self.get_body_argument() self.get_body_arguments() # 去get&post雙方去取數據 user = self.get_argument(‘username‘) print(user) self.redirect(‘www.baidu.com‘) settings = { ‘template_path‘: ‘tmp‘ } application = tornado.web.Application([ (r"/index", MainHandler), (r"/login", LoginHandler), ], **settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()View Code
此時便可執行
關於靜態文件
首先添加靜態文件夾,並放入一張圖片
靜態路徑註冊:
settings = { ‘template_path‘: ‘tmp‘, ‘static_path‘: ‘statics‘ }
login頁面加入圖片、註意以下路徑寫的是static,標準用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="POST" action="/login"> <input type="text" name="username" /> <input type="submit" value="提交" /> </form> <img src="/static/炫雅.jpeg" /> </body> </html>
此時訪問頁面
那能不能不用static作為靜態文件夾名稱呢?
答案當然是可以的,只需要這樣註冊:
settings = { ‘template_path‘: ‘tmp‘, ‘static_path‘: ‘statics‘, ‘static_url_prefix‘: ‘/jingtai/‘, # 這裏就是用戶自定義的靜態路徑名稱 }
再去修改login網頁裏的就好了。
Python Tornado簡介