參考:http://demo.pythoner.com/itt2zh/ch1.html
tornado是一個輕量級的web框架,是一個用python寫的web服務器,它有三個最大的特點(優勢)速度、簡單和可擴展性。
編寫tornado應用做多最多的工作就是定義一個類去繼承tornado中的RequestHandler類。
來看一個例子:
# hello.py
1 import tornado.httpserver 2 import tornado.ioloop 3 import tornado.options 4 import tornado.web 5 6 from tornado.options import define, options 7 define("port", default=8000, help="run on the given port", type=int) 8 9 class IndexHandler(tornado.web.RequestHandler): 10 def get(self): 11 greeting = self.get_argument('greeting', 'Hello') 12 self.write(greeting + ', friendly user!') 13 14 if __name__ == "__main__": 15 tornado.options.parse_command_line() 16 app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) 17 http_server = tornado.httpserver.HTTPServer(app) 18 http_server.listen(options.port) 19 tornado.ioloop.IOLoop.instance().start()
這個例子編寫了一個非常簡單的應用。
我們可以在命令行中啟動它:
python hello.py --port=8000
然后再從瀏覽器中打開這個應用,輸入網址:
http://localhost:8000/
可以看到網頁上顯示:
Hello, friendly user!
" 我們在命令行輸入的 ’prot' 的參數是通過第七行中的define傳遞的,define是tornado.options模塊中的一個函數,這個模塊用來讀取命令行中的一些設置。例如我們在命令行中設置了它的端口prot=8888,define就匹配出它所設置的同名變量 ‘prot’ ,將它從默認值改為 ‘8888’(默認值為8000),這時我們則需要從這個網址進入“http://localhost:8888/" "
這顯示的是我們代碼第12行 ’write‘進的內容。
我們可以定制一下這個內容,可以看到 ’write' 的有個自定義的變量 ‘greeting' ,而這個變量的默認值為 'Hello’ , 它是通過tornado中的內建函數 ‘ get_argument ‘ 來傳遞給 ’write‘ ,
所以我們來改變這個變量,從哪入手呢? 從網址入手!
http://localhost:8000/?greeting=Hi
在 ‘?’后給變量重新賦值,這時可以發現網頁上的內容變為:
Hi, friendly user!
來梳理以下這段代碼的工作流程:
14 if __name__ == "__main__": 15 tornado.options.parse_command_line() 16 app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) 17 http_server = tornado.httpserver.HTTPServer(app) 18 http_server.listen(options.port) 19 tornado.ioloop.IOLoop.instance().start()
1. 我們的應用真正運行起來的時 ‘15、16 ’兩行,通過tornado.options模塊解析命令行參數,再創建了一個tornado的Application類的實例,最重要的參數時 ‘handler’ 它來告訴tornado應該用哪個類來響應請求。
2. 后面開始,這段代碼將會被反復使用,Application對象被創建,我們將其傳遞給tornado中的HTTPServer對象,然后使用我的命令行指定端口監聽(通過options模塊取出)。
3. 最后,程序准備好接受http請求后,我們創建一個tornado的IOLoop的實例。
2016-11-17 15:51:49