Flask 回調(diào)和錯(cuò)誤

2021-06-28 16:24 更新

在 Flask 中,請(qǐng)求處理時(shí)發(fā)生一個(gè)錯(cuò)誤時(shí)會(huì)發(fā)生什么?這個(gè)特殊的行為在 0.7 中 變更了,因?yàn)槲覀兿胍?jiǎn)單地得知實(shí)際發(fā)生了什么。新的行為相當(dāng)簡(jiǎn)單:

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)