摘要:就是將當前輸出緩沖區(qū)刷新到網(wǎng)頁。如果輸出已寫入但尚未刷新,則將其丟棄并替換為錯誤頁面。設置響應的狀態(tài)代碼,參數(shù)響應狀態(tài)碼。
Tornado輸出和響應頭
在上一篇文章03、Tornado的輸入與輸出 對write有了初步的了解
這篇文章我們先來深入了解一下write
首先我們在上一次的tornado文件夾下新建一個lesson3文件夾
實際上,write并沒有直接把數(shù)據(jù)返回給前端,而是先寫到緩存區(qū),函數(shù)結(jié)束之后才會返回到前端。
我們驗證如下:
新建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()的時候,結(jié)果是不一樣的。如果有的話,就可以先看到前面的輸出,沒有的話,要等到函數(shù)執(zhí)行完才能夠一起打印出來 。self.flush()就是將當前輸出緩沖區(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ù)會報錯
self.finish() self.write("en~~~~")
報錯內(nèi)容:RuntimeError: Cannot write() after finish()
將給定的HTTP錯誤發(fā)送到瀏覽器
函數(shù)原型:
RequestHandler.send_error(status_code = 500,**kwargs)
如果flush()已經(jīng)被調(diào)用,則不可能發(fā)送錯誤,因此該方法將簡單地終止響應。如果輸出已寫入但尚未刷新,則將其丟棄并替換為錯誤頁面。
覆蓋write_error()以自定義返回的錯誤頁面。傳遞附加的關(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() 則不會顯示錯誤
覆蓋以實現(xiàn)自定義錯誤頁面
函數(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方法,可以實現(xiàn)自定義的輸出錯誤。
設置響應的狀態(tài)代碼
RequestHandler.set_status(status_code,reason = None)
參數(shù):
status_code(int) - 響應狀態(tài)碼。
reason(string) - 描述狀態(tài)代碼的人類可讀原因短語。
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("hujing",18) self.set_header("changsha","hunan")
函數(shù)原型:
RequestHandler.set_header(name, value)
如果值不是字符串,我們將其轉(zhuǎn)換為字符串。然后將所有標題值編碼為UTF-8
self.set_header可以設置自己的需要的響應頭
添加給定的響應頭和值
函數(shù)原型:
RequestHandler.add_header(*name*, *value*)
不同set_header,add_header可能會多次調(diào)用以返回相同鍵的多個值。相同的鍵set_header只能返回一個值
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")
class IndexHandler(tornado.web.RequestHandler): def set_default_headers(self): print(" ---set_default_headers---:設置header"+"
") def initialize(self): print(" ---initialize---:初始化"+"
") def prepare(self): print(" ---prepare---:準備工作"+"
") def get(self): self.write(" ---get---:處理get請求"+"
") def post(self): self.write(" ---post---:處理post請求"+"
") def write_error(self, status_code, **kwargs): print(" ---write_error---:處理錯誤"+"
") def on_finish(self): print(" ---on_finish---:結(jié)束,釋放資源"+"
")
以上便是是一個響應在后臺的執(zhí)行順序??梢愿鶕?jù)需求來實現(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://systransis.cn/yun/44647.html
摘要:譯者說于年月日發(fā)布,該版本正式支持的關(guān)鍵字,并且用舊版本編譯同樣可以使用這兩個關(guān)鍵字,這無疑是一種進步。其次,這是最后一個支持和的版本了,在后續(xù)的版本了會移除對它們的兼容。本節(jié)最好直接在或者閱讀,以獲得更好的閱讀體驗格式支持。 譯者說 Tornado 4.3于2015年11月6日發(fā)布,該版本正式支持Python3.5的async/await關(guān)鍵字,并且用舊版本CPython編譯Torn...
摘要:譯者說于年月日發(fā)布,該版本正式支持的關(guān)鍵字,并且用舊版本編譯同樣可以使用這兩個關(guān)鍵字,這無疑是一種進步。其次,這是最后一個支持和的版本了,在后續(xù)的版本了會移除對它們的兼容。 譯者說 Tornado 4.3于2015年11月6日發(fā)布,該版本正式支持Python3.5的async/await關(guān)鍵字,并且用舊版本CPython編譯Tornado同樣可以使用這兩個關(guān)鍵字,這無疑是一種進步。其次...
閱讀 3531·2021-11-24 09:39
閱讀 790·2019-08-30 14:22
閱讀 3042·2019-08-30 13:13
閱讀 2327·2019-08-29 17:06
閱讀 2928·2019-08-29 16:22
閱讀 1264·2019-08-29 10:58
閱讀 2440·2019-08-26 13:47
閱讀 1639·2019-08-26 11:39