(2018-05-26.Python從Zero到One)8、(Tornado)深入tornado__1.3.1 Application

3.1 Application

settings

前面的學(xué)習(xí)中,我們?cè)趧?chuàng)建tornado.web.Application的對(duì)象時(shí),傳入了第一個(gè)參數(shù)——路由映射列表。實(shí)際上Application類的構(gòu)造函數(shù)還接收很多關(guān)于tornado web應(yīng)用的配置參數(shù),在后面的學(xué)習(xí)中我們用到的地方會(huì)為大家介紹。

我們先來(lái)學(xué)習(xí)一個(gè)參數(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ú)通過(guò)autoreload=True設(shè)置;
  • 取消緩存編譯的模板,可以單獨(dú)通過(guò)compiled_template_cache=False來(lái)設(shè)置;
  • 取消緩存靜態(tài)文件hash值,可以單獨(dú)通過(guò)static_hash_cache=False來(lái)設(shè)置;
  • 提供追蹤信息,當(dāng)RequestHandler或者其子類拋出一個(gè)異常而未被捕獲后,會(huì)生成一個(gè)包含追蹤信息的頁(yè)面,可以單獨(dú)通過(guò)serve_traceback=True來(lái)設(shè)置。
    使用debug參數(shù)的方法:
import tornado.web
app = tornado.web.Application([], debug=True)

路由映射

先前我們?cè)跇?gòu)建路由映射列表的時(shí)候,使用的是二元元組,如:

[(r"/", IndexHandler),]
```
對(duì)于這個(gè)映射列表中的路由,實(shí)際上還可以傳入多個(gè)信息,如:
```
[
    (r"/", Indexhandler),
    (r"/cpp", ItcastHandler, {"subject":"c++"}),
    url(r"/python", ItcastHandler, {"subject":"python"}, name="python_url")
]
```
對(duì)于路由中的字典,會(huì)傳入到對(duì)應(yīng)的RequestHandler的initialize()方法中:
```
from tornado.web import RequestHandler
class ItcastHandler(RequestHandler):
    def initialize(self, subject):
        self.subject = subject

    def get(self):
        self.write(self.subject)
```
對(duì)于路由中的name字段,注意此時(shí)不能再使用元組,而應(yīng)使用tornado.web.url來(lái)構(gòu)建。name是給該路由起一個(gè)名字,可以通過(guò)調(diào)用RequestHandler.reverse_url(name)來(lái)獲取該名子對(duì)應(yīng)的url。
```
# 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">itcast</a>' %
                   python_url)

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

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

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application([
            (r"/", Indexhandler),
            (r"/cpp", ItcastHandler, {"subject":"c++"}),
            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()
```
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • 引言 以Django為代表的python web應(yīng)用部署時(shí)采用wsgi協(xié)議與服務(wù)器對(duì)接(被服務(wù)器托管),而這類服務(wù)...
    大熊_7d48閱讀 2,130評(píng)論 0 3
  • 譯者說(shuō) Tornado 4.3于2015年11月6日發(fā)布,該版本正式支持Python3.5的async/await...
    TaoBeier閱讀 3,184評(píng)論 0 10
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,284評(píng)論 6 342
  • 一、思維導(dǎo)圖的作用 1、思維導(dǎo)圖既能夠充分鍛煉大腦的邏輯思維,也能鍛煉大腦的形象思維,開發(fā)想象力。 它結(jié)構(gòu)分支的分...
    丹菡閱讀 12,179評(píng)論 7 14

友情鏈接更多精彩內(nèi)容