Application
1,settings
在創(chuàng)建tornado.web.Application的對象時(shí)袭祟,傳入了第一個(gè)參數(shù)——路由映射列表撵术。實(shí)際上Application類的構(gòu)造函數(shù)還接收很多關(guān)于tornado web應(yīng)用的配置參數(shù)催蝗。
debug設(shè)置
debug纽帖,設(shè)置tornado是否工作在調(diào)試模式馁害,默認(rèn)為False即工作在生產(chǎn)模式宅倒。
當(dāng)設(shè)置debug=True 后尖殃,tornado會(huì)工作在調(diào)試/開發(fā)模式丈莺,在此種模式下,tornado為方便我們開發(fā)而提供了幾種特性:
自動(dòng)重啟送丰,tornado應(yīng)用會(huì)監(jiān)控我們的源代碼文件缔俄,當(dāng)有改動(dòng)保存后便會(huì)重啟程序,這可以減少我們手動(dòng)重啟程序的次數(shù)。需要注意的是俐载,一旦我們保存的更改有錯(cuò)誤蟹略,自動(dòng)重啟會(huì)導(dǎo)致程序報(bào)錯(cuò)而退出,從而需要我們保存修正錯(cuò)誤后手動(dòng)啟動(dòng)程序遏佣。這一特性也可單獨(dú)通過autoreload=True設(shè)置挖炬;
取消緩存編譯的模板,可以單獨(dú)通過compiled_template_cache=False來設(shè)置状婶;
取消緩存靜態(tài)文件hash值意敛,可以單獨(dú)通過static_hash_cache=False來設(shè)置;
提供追蹤信息膛虫,當(dāng)RequestHandler或者其子類拋出一個(gè)異常而未被捕獲后草姻,會(huì)生成一個(gè)包含追蹤信息的頁面,可以單獨(dú)通過serve_traceback=True來設(shè)置稍刀。
使用debug參數(shù)的方法:
import tornado.web
app = tornado.web.Application([], debug=True)
2撩独,路由映射
先前我們在構(gòu)建路由映射列表的時(shí)候,使用的是二元元組账月,如:
[(r"/", IndexHandler),]
對于這個(gè)映射列表中的路由综膀,實(shí)際上還可以傳入多個(gè)信息,如:
[
(r"/", Indexhandler),
(r"/python", HaroldHandler, {"subject":"python"}),
url(r"/python", HaroldHandler, {"subject":"python"}, name="python_url")
]
對于路由中的字典局齿,會(huì)傳入到對應(yīng)的RequestHandler的initialize()方法中:
from tornado.web import RequestHandler
class HaroldHandler(RequestHandler):
def initialize(self, subject):
self.subject = subject
def get(self):
self.write(self.subject)
對于路由中的name字段剧劝,注意此時(shí)不能再使用元組,而應(yīng)使用tornado.web.url來構(gòu)建项炼。name是給該路由起一個(gè)名字担平,可以通過調(diào)用RequestHandler.reverse_url(name)來獲取該名子對應(yīng)的url。
3,小案例
# 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 HaroldHandler(RequestHandler):
def get(self):
python_url = self.reverse_url("python_url")
self.write('<a href="%s">Harold python</a>' %
python_url)
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application([
url(r"/python", HaroldHandler, {"subject":"python"}, name="python_url")
],
debug = True)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()