1. 程式人生 > >tornado使用者指引(六)------Tornado web應用程式結構(一)之Applicaton物件

tornado使用者指引(六)------Tornado web應用程式結構(一)之Applicaton物件

一個基於tornado的web應用程式通常由一個或多個RequestHandler的子類和一個Application物件構成。Application用於將不同的請求路由到相應的RequestHandler.

然後 我們在main函式裡啟動web服務。

一個簡單的"hello world"的例子如下所示:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def
make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()

Application物件:

Application物件負責進行全域性的配置,包括一個用於將requests對映到handler的路由表。

這個路由表是一個由URLSpec物件(或者元組)組成的列表,其中的每一項包含了至少一個正則表示式和一個RequestHandler類。

按照匹配的先後順序,第一個匹配的RequestHandler類將會被使用。

如果正則表示式包含捕獲模式組:如下面的正則表示式包含2個捕獲模式組(.*)

 /([0-9]{4})/([a-z-]+)/

那麼url路徑中捕獲到的匹配路徑將會作為引數傳遞給RequestHandler類的HTTP方法。

如果一個字典作為URLSpec的第3個引數被傳入,它將會作為初始化引數被傳遞給RequestHandler.initialize()方法

最後,URLSpec可以擁有一個名字,可以通過name=xxx的方式指定,可以通過

RequestHandler.reverse_url來方法這個名字。

舉例:

class
MainHandler(RequestHandler): def get(self): self.write('<a href="%s">link to story 1</a>' % self.reverse_url("story", "1")) class StoryHandler(RequestHandler): def initialize(self, db): self.db = db def get(self, story_id): self.write("this is story %s" % story_id) app = Application([ url(r"/", MainHandler), url(r"/story/([0-9]+)", StoryHandler, dict(db=db), name="story") ])
在上面的例子中,根URL"/"被對映到MainHandler;然後URL模式”/story/緊跟著一個數字”被對映到StoryHandler,由於包含了一個捕獲組,這個數字

被作為引數傳遞給了get方法,這個URLSpec還有一個字典引數,通常可以在這裡傳遞資料庫物件;

最後指定了一個名稱引數。

Application的建構函式可以傳遞許多關鍵字引數來定製應用程式的功能或者開啟關閉某些特性。

可以通過檢視Application.settings來了解有哪些配置選項。