tornado之運行第一個tornado程序

Tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠強健,但卻在建立和編寫時有着足夠的輕量級,並可以被用在大量的應用和工具中。python

首先是安裝tornado. tornado不支持windows。若是須要在windows下安裝能夠經過ActivePythonPyPM包管理器進行安裝相似:pypm install tornadolinux

linux下安裝就簡單多了。pip install tornado就能夠了web

 

下面咱們進入tornado的功能。首先來看一個基本的web應用,在給定的端口上監聽請求,並在根目錄」/」響應請求django

 

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define,options
define("port",default=8000,help="run on the given port",type=int)

class indexHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
greeting=self.get_argument('greeting','hello')
self.write(greeting+'tornado user')



def server_function():
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", indexHandler),(r"/index",indexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port,address='127.0.0.1')
tornado.ioloop.IOLoop.instance().start()



在終端執行:windows

zhf@zhf-maple:~/py_prj$ python tornada_try.py瀏覽器

而後在瀏覽器輸入http://localhost:8000/服務器

 

此時在終端上能夠看到對應的輸出。網絡

zhf@zhf-maple:~/py_prj$ python tornada_try.pyapp

[I 171204 10:53:23 web:2063] 200 GET / (127.0.0.1) 0.49ms函數

[W 171204 10:53:23 web:2063] 404 GET /favicon.ico (127.0.0.1) 0.40ms

 

下面來介紹下上面應用的各個模塊:

首先看下options功能。在運行代碼的時候會設置端口和地址等參數。python自帶有argparse模塊進行參數解析。tornado中不須要調用argparse模塊而是自帶了options模塊。下面是測試代碼:

import tornado.options

 

from tornado.options import options

 

if __name__=="__main__":
    tornado.options.parse_command_line()
    print options.port

 

終端執行腳本:

zhf@zhf-maple:~/py_prj$ python tornada_try.py --port=8001

8001

若是加入了不存在的參數會報以下的錯誤

zhf@zhf-maple:~/py_prj$ python tornada_try.py --addr=127.0.0.1

tornado.options.Error: Unrecognized command line option: 'addr

 

也能夠不帶參數,經過define來設置默認參數。以下。port表明新增長的參數名稱

default表明默認值,help表明幫助信息,當使用--help的時候會打印help的字段。type表明了前面新加參數的類型。

from tornado.options import define

define("port",default=9000,help="run on the given port",type=int)

 

 

from tornado.options import define

define("port",default=9000,help="run on the given port",type=int)

 

運行結果以下:

zhf@zhf-maple:~/py_prj$ python tornada_try.py

9000

zhf@zhf-maple:~/py_prj$ python tornada_try.py --help

tornada_try.py options:

 

  --port                           run on the given port (default 9000)

 

 

IndexHandler:這個類繼承於tornado.web.RequestHandler。每當網頁發起一個請求的時候,Tornadah會調用這個類並將其實例化。而後調用HTTP請求所對應的方法。也就是get方法,這個處理函數將對HTTP的GET請求做出響應。

在get方法中調用了get_argument方法。這個函數的做用是增長參數greeting,並初始化爲hello。在後面的write方法調用。

 

write方法:這個參數的做用是生成HTTP response的具體信息。在這裏裏面的參數是greeting+「tornado user」, 所以在網頁中生成的信息是hellotornado user

Application: 這是tornado運轉起來的語句,tornado.web.Application(handlers=[(r"/", IndexHandler)])建立了一個Application實例,傳遞給Application的__init__函數最重要的是參數是handler,也就是[(r"/", IndexHandler)]。 handler告訴tornado該 用哪一個類來響應請求。

最後是服務器的啓動:listen方法監聽端口和地址。ioloop方法循環執行server監聽功能。

http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port,address='127.0.0.1')
tornado.ioloop.IOLoop.instance().start()

咱們來具體看下handler參數的用法。這個handler參數是一元組組成的列表。其中元組第一個參數表明的是網頁訪問路徑,第二個是該訪問路徑的觸發實例

tornado.web.Application(handlers=[(r"/", indexHandler)]}

在前面的運行中,在網頁中輸入http://localhost:8000/能夠獲得打印的字符串。可是若是咱們輸入http://localhost:8000/index則會提示404:Not Found.提示找不到對應的網頁。緣由在於咱們在handlers中並無添加/index的處理方法。這就至關與django中的路由機制:

 

url(r'index/',views.index)      /index對應的處理函數是views.index

 

那麼若是咱們要訪問index這個網頁路徑,也須要在handers中添加對應的路由機制。這樣當輸入http://localhost:8000/index 也會調用indexHandler實例

 

tornado.web.Application(handlers=[(r"/", indexHandler),(r"/index",indexHandler)]

 

另外在indexHandler中咱們只定義了get方法。在網頁中傳遞數據有get和post兩種方法。若是網頁採用的是post的方法,那麼一樣的在indexHandler中須要定義post函數,用法和get函數是同樣的。

相關文章
相關標籤/搜索