国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Tornado-04、Tornado輸出和響應(yīng)頭

coolpail / 2393人閱讀

摘要:就是將當(dāng)前輸出緩沖區(qū)刷新到網(wǎng)頁。如果輸出已寫入但尚未刷新,則將其丟棄并替換為錯(cuò)誤頁面。設(shè)置響應(yīng)的狀態(tài)代碼,參數(shù)響應(yīng)狀態(tài)碼。

Tornado輸出和響應(yīng)頭
1、輸出

在上一篇文章03、Tornado的輸入與輸出 對write有了初步的了解
這篇文章我們先來深入了解一下write
首先我們在上一次的tornado文件夾下新建一個(gè)lesson3文件夾
實(shí)際上,write并沒有直接把數(shù)據(jù)返回給前端,而是先寫到緩存區(qū),函數(shù)結(jié)束之后才會返回到前端。
我們驗(yàn)證如下:
新建start1.py文件 添加完基本的代碼后加入以下代碼

class FlushHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("11111111111" + "
") self.write("22222222222" + "
") self.write("There comes a flush" + "
") self.flush() import time time.sleep(5) self.write("33333333333" + "
") self.write("There no flush" + "
") self.write("The function is almost over!")

這里我們可以很明顯看到,在有無self.flush()的時(shí)候,結(jié)果是不一樣的。如果有的話,就可以先看到前面的輸出,沒有的話,要等到函數(shù)執(zhí)行完才能夠一起打印出來 。self.flush()就是將當(dāng)前輸出緩沖區(qū)刷新到網(wǎng)頁。

除了上面的self.flush()之外,還有self.finish()需要我們注意,它就類似于函數(shù)里面的return,一旦執(zhí)行,后面就不能再執(zhí)行self.write,函數(shù)原型:

RequestHandler.finish(chunk = None)

在finish函數(shù)調(diào)用完后,調(diào)用write函數(shù)會報(bào)錯(cuò)

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

報(bào)錯(cuò)內(nèi)容:RuntimeError: Cannot write() after finish()

將給定的HTTP錯(cuò)誤發(fā)送到瀏覽器

函數(shù)原型:

RequestHandler.send_error(status_code = 500,**kwargs)

如果flush()已經(jīng)被調(diào)用,則不可能發(fā)送錯(cuò)誤,因此該方法將簡單地終止響應(yīng)。如果輸出已寫入但尚未刷新,則將其丟棄并替換為錯(cuò)誤頁面。

覆蓋write_error()以自定義返回的錯(cuò)誤頁面。傳遞附加的關(guān)鍵字參數(shù)
添加下面的Handler

class ErrorHandler(tornado.web.RequestHandler):
    def get(self):
        self.send_error(404)
        # self.flush()
        self.send_error(404)  #如果已經(jīng)執(zhí)行 self.flush() 則不會顯示錯(cuò)誤


覆蓋以實(shí)現(xiàn)自定義錯(cuò)誤頁面

函數(shù)原型:

RequestHandler.write_error(status_code** kwargs )

write_error可以調(diào)用write,render,set_header等,以產(chǎn)生輸出。
在ErrorHandler中添加以下代碼

def write_error(self, status_code, **kwargs):  # 重寫write_error方法
    self.write("---%d----
"%status_code)

通過重寫write_error方法,可以實(shí)現(xiàn)自定義的輸出錯(cuò)誤。

設(shè)置響應(yīng)的狀態(tài)代碼

RequestHandler.set_status(status_code,reason = None)

參數(shù):

status_code(int) - 響應(yīng)狀態(tài)碼。

reason(string) - 描述狀態(tài)代碼的人類可讀原因短語。

self.set_status(404,"error")

2.響應(yīng)頭的設(shè)置

以谷歌瀏覽器為例:按下F12,可以打開瀏覽器自帶的控制臺,我們選擇Network,這里我們可以看到瀏覽器在頁面上沒有看到的信息。打開之后刷新一下,選擇之后就可以看到:General,Respnse Headers和Request Headers

General:是請求中基本信息,Respnse Headers是相應(yīng)信息,Request Headers是請求信息,在服務(wù)器端可以設(shè)置給瀏覽器的相應(yīng)信息。
添加以下代碼

(r"/header",HeadersHandler),

class HeadersHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("headers")
        self.set_header("hujing",18)
        self.set_header("changsha","hunan")

函數(shù)原型:

RequestHandler.set_header(name, value)

如果值不是字符串,我們將其轉(zhuǎn)換為字符串。然后將所有標(biāo)題值編碼為UTF-8

self.set_header可以設(shè)置自己的需要的響應(yīng)頭

添加給定的響應(yīng)頭和值

函數(shù)原型:

RequestHandler.add_header(*name*, *value*)

不同set_header,add_header可能會多次調(diào)用以返回相同鍵的多個(gè)值。相同的鍵set_header只能返回一個(gè)值

self.set_header("hujing","20")  #這里只會顯示hujing:20 覆蓋了前面的hujing:18
self.add_header("hujing","19")  
self.add_header("changsha","0731")  
self.add_header("changsha","0321") 

撤消先前的set_header調(diào)用

有添加,就會有刪除,函數(shù)原型:

RequestHandler.clear_header(name)


self.clear_header("changsha")

3.相應(yīng)頭的執(zhí)行順序
class IndexHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
        print(" ---set_default_headers---:設(shè)置header"+"
") def initialize(self): print(" ---initialize---:初始化"+"
") def prepare(self): print(" ---prepare---:準(zhǔn)備工作"+"
") def get(self): self.write(" ---get---:處理get請求"+"
") def post(self): self.write(" ---post---:處理post請求"+"
") def write_error(self, status_code, **kwargs): print(" ---write_error---:處理錯(cuò)誤"+"
") def on_finish(self): print(" ---on_finish---:結(jié)束,釋放資源"+"
")

以上便是是一個(gè)響應(yīng)在后臺的執(zhí)行順序。可以根據(jù)需求來實(shí)現(xiàn)自己需要的內(nèi)容。

本文章源碼總和

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

define("port", default=9000, help="run port", type=int)


class FlushHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("11111111111" + "
") self.write("22222222222" + "
") self.write("There comes a flush" + "
") self.flush() import time time.sleep(5) self.write("33333333333" + "
") self.write("There no flush" + "
") self.write("The function is almost over!") class ErrorHandler(tornado.web.RequestHandler): def get(self): self.send_error(404) # self.set_status(404, "error") def write_error(self, status_code, **kwargs): # 重寫write_error方法 self.write("--%d-- " % status_code) class HeadersHandler(tornado.web.RequestHandler): def get(self): self.write("headers") self.set_header("hujing", 18) self.set_header("changsha", "hunan") self.set_header("hujing", "20") # 1 self.add_header("hujing", "19") # 2 self.add_header("changsha", "0731") # 3 self.add_header("changsha", "0321") # 4 if __name__ == "__main__": tornado.options.parse_command_line() print(options.port) # 打印端口到terminal app = tornado.web.Application( handlers=[ (r"/flush", FlushHandler), (r"/error", ErrorHandler), (r"/header", HeadersHandler), ], template_path="templates", ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44647.html

相關(guān)文章

  • Tornado 4.3文檔翻譯: web框架-RequestHandlerApplication

    摘要:譯者說于年月日發(fā)布,該版本正式支持的關(guān)鍵字,并且用舊版本編譯同樣可以使用這兩個(gè)關(guān)鍵字,這無疑是一種進(jìn)步。其次,這是最后一個(gè)支持和的版本了,在后續(xù)的版本了會移除對它們的兼容。本節(jié)最好直接在或者閱讀,以獲得更好的閱讀體驗(yàn)格式支持。 譯者說 Tornado 4.3于2015年11月6日發(fā)布,該版本正式支持Python3.5的async/await關(guān)鍵字,并且用舊版本CPython編譯Torn...

    xiongzenghui 評論0 收藏0
  • Tornado 4.3文檔翻譯: 用戶指南-web應(yīng)用的結(jié)構(gòu)

    摘要:譯者說于年月日發(fā)布,該版本正式支持的關(guān)鍵字,并且用舊版本編譯同樣可以使用這兩個(gè)關(guān)鍵字,這無疑是一種進(jìn)步。其次,這是最后一個(gè)支持和的版本了,在后續(xù)的版本了會移除對它們的兼容。 譯者說 Tornado 4.3于2015年11月6日發(fā)布,該版本正式支持Python3.5的async/await關(guān)鍵字,并且用舊版本CPython編譯Tornado同樣可以使用這兩個(gè)關(guān)鍵字,這無疑是一種進(jìn)步。其次...

    LinkedME2016 評論0 收藏0

發(fā)表評論

0條評論

coolpail

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<