Flask 回調(diào)和錯誤

2021-08-09 09:52 更新

在 Flask 中,請求處理時(shí)發(fā)生一個(gè)錯誤時(shí)會發(fā)生什么?這個(gè)特殊的行為在 0.7 中 變更了,因?yàn)槲覀兿胍唵蔚氐弥獙?shí)際發(fā)生了什么。新的行為相當(dāng)簡單:

  1. 在每個(gè)請求之前,執(zhí)行 before_request() 上綁定的函數(shù)。 如果這些函數(shù)中的某個(gè)返回了一個(gè)響應(yīng),其它的函數(shù)將不再被調(diào)用。任何情況 下,無論如何這個(gè)返回值都會替換視圖的返回值。
  2. 如果 before_request() 上綁定的函數(shù)沒有返回一個(gè)響應(yīng), 常規(guī)的請求處理將會生效,匹配的視圖函數(shù)有機(jī)會返回一個(gè)響應(yīng)。
  3. 視圖的返回值之后會被轉(zhuǎn)換成一個(gè)實(shí)際的響應(yīng)對象,并交給 after_request() 上綁定的函數(shù)適當(dāng)?shù)靥鎿Q或修改它。
  4. 在請求的最后,會執(zhí)行 teardown_request() 上綁定的函 數(shù)。這總會發(fā)生,即使在一個(gè)未處理的異常拋出后或是沒有請求前處理器執(zhí)行過 (例如在測試環(huán)境中你有時(shí)會想不執(zhí)行請求前回調(diào))。

現(xiàn)在錯誤時(shí)會發(fā)生什么?在生產(chǎn)模式中,如果一個(gè)異常沒有被捕獲,將調(diào)用 500 internal server 的處理。在生產(chǎn)模式中,即便異常沒有被處理過,也會往上冒 泡拋給給 WSGI 服務(wù)器。如此,像交互式調(diào)試器這樣的東西可以提供有用的調(diào)試信息。

在 0.7 中做出的一個(gè)重大變更是內(nèi)部服務(wù)器錯誤不再被請求后回調(diào)傳遞處理,而且 請求后回調(diào)也不再保證會執(zhí)行。這使得內(nèi)部的調(diào)度代碼更簡潔,易于定制和理解。

新的綁定于銷毀請求的函數(shù)被認(rèn)為是用于代替那些請求的最后絕對需要發(fā)生的事。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號