天天看點

Python Tonado 寫一個Web應用

最近在看Jupyter源碼發現了tornado這個web架構。

不僅僅做一個web架構, 通過使用非阻塞網絡I/O,Tornado可以擴充到數萬個開放連接配接。

這樣非常适合 long polling , WebSockets 以及其他需要與每個使用者建立長期連接配接的應用程式。

好,下面安裝試用一下。

安裝

pip install tornado
      

試試看使用tornado架構來寫一個web application

https://www.osgeo.cn/tornado/
import tornado.ioloop
import tornado.web
 
“”“編寫一個請求處理器”“”
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, Tornado Server");
 
 
"""建立一個web app"""
def make_app():
    #綁定接口“/” 到MainHandler
    return tornado.web.Application([
        (r"/", MainHandler),    
    ])
 
 
#程式入口
if __name__ == '__main__':
    app = make_app()
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()      
Python Tonado 寫一個Web應用

再試試做一個form

import tornado.ioloop
import tornado.web
 
#一個處理form的請求處理器
class MyFormHandler(tornado.web.RequestHandler):
    def get(self):
        #直接頁面渲染一個form
        self.write('<html><body><form action="/form" method="POST">'
                   '<input type="text" name="message">'
                   '<input type="submit" value="Submit">'
                   '</form></body></html>')
 
    def post(self):
        self.set_header("Content-Type", "text/plain")
        self.write("You wrote " + self.get_body_argument("message"))
 
 
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, Tornado Server");
 
def make_app():
    #使用application加載多個路由: “/” 接口路由 和 “/form” 接口路由
    return tornado.web.Application([
        (r"/", MainHandler),
        (r"/form", MyFormHandler)
    ])
 
 
if __name__ == '__main__':
    app = make_app()
    app.listen(18081)
    tornado.ioloop.IOLoop.current().start()      

以上代碼比前面第一個示例多了一個form的請求處理器和路由加載。

看看頁面渲染的效果,沒有内嵌任何js,這個submit按鈕就直接把發起了POST請求給“/form”接口。

而且部落客也沒有編寫任何JS處理頁面,特别簡化,這個”小魔法“是本文想要推薦tornado的一個原因!

Python Tonado 寫一個Web應用

以上随筆,後面再繼續推這個架構的解讀。