Tornado輸出和響應頭

1.輸出html

再來看看輸出`write`,實際上,`write`並無直接把數據返回給前端,而是先寫到緩存區,函數結束以後纔會返回到前端,咱們驗證以下前端

class FlushHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('this is '+'<br>')
        self.write('tornado'+'<br>')
        self.flush()
        import time
        time.sleep(5)
        self.write('hahaha')
        self.flush()
        self.write('en~~~~')

這裏咱們能夠很明顯看到,在有無`self.flush()`的時候,結果是不同的。若是有的話,就能夠先看到前面的輸出,沒有的話,要等到函數執行完纔可以一塊兒打印出來 。`self.flush()`就是將當前輸出緩衝區刷新到網絡。web

除了上面的`self.flush()`以外,還有`self.finish()`須要咱們注意,它就相似於函數裏面的`return`,一旦執行,後面就不能再執行`self.write`,函數原型:瀏覽器

[`RequestHandler.finish(chunk = None)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.finish)緩存

在finish函數調用完後,調用write函數會報錯服務器

self.finish()
self.write('en~~~~')

**將給定的HTTP錯誤發送到瀏覽器**網絡

[`RequestHandler.send_error(status_code = 500,**kwargs) `](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.send_error)函數

若是[`flush()`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.flush)已經被調用,則不可能發送錯誤,所以該方法將簡單地終止響應。若是輸出已寫入但還沒有刷新,則將其丟棄並替換爲錯誤頁面。tornado

覆蓋[`write_error()`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write_error)以自定義返回的錯誤頁面。傳遞附加的關鍵字參數post

self.send_error(404)  #若是已經執行 self.flush() 則不會不能顯示錯誤

**覆蓋以實現自定義錯誤頁面**

函數原型:

[`RequestHandler.write_error(*status_code*,**\* kwargs *)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.write_error)

`write_error`能夠調用[`write`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write),[`render`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.render),[`set_header`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.set_header)等,以產生輸出。

def write_error(self, status_code, **kwargs):
  self.write("---%d----\n"%status_code)

經過重寫`write_error`方法,能夠實現自定義的輸出錯誤。

**設置響應的狀態代碼**

[`RequestHandler.set_status(status_code,reason = None)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.set_status)

參數:

\- status_code(int) - 響應狀態碼。

\- reason(string) - 描述狀態代碼的人類可讀緣由短語。

self.set_status(404,'error')

2.響應頭的設置

以谷歌瀏覽器爲例:按下F12,能夠打開瀏覽器自帶的控制檯,咱們選擇Network,這裏咱們能夠看到瀏覽器在頁面上沒有看到的信息。打開以後刷新一下,選擇以後就能夠看到:`General`,`Respnse Headers`和`Request Headers`

`General`:是請求中基本信息,`Respnse Headers`是相應信息,`Request Headers`是請求信息,在服務器端能夠設置給瀏覽器的相應信息。

(r'/header',HeadersHandler),
class HeadersHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('headers')
        self.set_header('budong',18)
        self.set_header('changsha','hunan')

函數原型:

[`RequestHandler.set_header(name, value)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.set_header)

若是值不是字符串,咱們將其轉換爲字符串。而後將全部標題值編碼爲UTF-8

`self.set_header`能夠設置本身的須要的響應頭

**添加給定的響應頭和值**

函數原型:

[`RequestHandler.add_header(*name*, *value*)`](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.add_header)

不一樣[`set_header`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.set_header),[`add_header`](http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.add_header)可能會屢次調用以返回相同鍵的多個值。相同的鍵`set_header`只能返回一個值

self.set_header('jingqi','20')
self.add_header('jingqi','19')
self.add_header('jingjing','0731')

 **撤消先前的set_header調用**

有添加,就會有刪除,函數原型:

[`RequestHandler.clear_header`(*name*)](http://www.tornadoweb.org/en/stable/_modules/tornado/web.html#RequestHandler.clear_header)

self.clear_header('changsha')

**相應頭的執行順序**

class IndexHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
        print(' ---set_default_headers---:設置header'+'<br>')

    def initialize(self):
        print(' ---initialize---:初始化'+'<br>')

    def prepare(self):
        print(' ---prepare---:準備工做'+'<br>')

    def get(self):
        self.write(' ---get---:處理get請求'+'<br>')

    def post(self):
        self.write(' ---post---:處理post請求'+'<br>')

    def write_error(self, status_code, **kwargs):
        print(' ---write_error---:處理錯誤'+'<br>')

    def on_finish(self):
        print(' ---on_finish---:結束,釋放資源'+'<br>')
相關文章
相關標籤/搜索