Tornado框架04-配置文件和路由

01-Application

settings

在創建tornado.web.Application的對象時,傳入了第一個參數——路由映射列表。實際上Application類的構造函數還接收很多關於tornado web應用的配置參數。

debug設置

debug,設置tornado是否工作在調試模式,默認爲False即工作在生產模式。
當設置debug=True 後,tornado會工作在調試/開發模式,在此種模式下,tornado爲方便我們開發而提供了幾種特性:

  • 自動重啓,tornado應用會監控我們的源代碼文件,當有改動保存後便會重啓程序,這可以減少我們手動重啓程序的次數。需要注意的是,一旦我們保存的更改有錯誤,自動重啓會導致程序報錯而退出,從而需要我們保存修正錯誤後手動啓動程序。這一特性也可單獨通過autoreload=True設置;

  • 取消緩存編譯的模板,可以單獨通過compiled_template_cache=False來設置;

  • 取消緩存靜態文件hash值,可以單獨通過static_hash_cache=False來設置;

  • 提供追蹤信息,當RequestHandler或者其子類拋出一個異常而未被捕獲後,會生成一個包含追蹤信息的頁面,可以單獨通過serve_traceback=True來設置。

使用debug參數的方法:

import tornado.web
app = tornado.web.Application([], debug=True)

02-路由映射

先前我們在構建路由映射列表的時候,使用的是二元元組,如:

[(r"/", IndexHandler),]

對於這個映射列表中的路由,實際上還可以傳入多個信息,如:

[
    (r"/", Indexhandler),
    (r"/python", XiaokeHandler, {"subject":"python"}),
    url(r"/python", XiaokeHandler, {"subject":"python"}, name="python_url")
]

對於路由中的字典,會傳入到對應的RequestHandler的initialize()方法中:

from tornado.web import RequestHandler

class XiaokeHandler(RequestHandler):
    def initialize(self, subject):
        self.subject = subject

    def get(self):
        self.write(self.subject)

對於路由中的name字段,注意此時不能再使用元組,而應使用tornado.web.url來構建。name是給該路由起一個名字,可以通過調用RequestHandler.reverse_url(name)來獲取該名子對應的url。

03-小案例

# coding:utf-8

import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
from tornado.options import options, define
from tornado.web import url, RequestHandler

define("port", default=8000, type=int, help="run server on the given port.")

class IndexHandler(RequestHandler):
    def get(self):
        python_url = self.reverse_url("python_url")
        self.write('<a href="%s">xiaoke  python</a>' %
                   python_url)

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

    app = tornado.web.Application([
      url(r"/python", ItcastHandler, {"subject":"python"}, name="python_url")
        ],
        debug = True)

    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章