W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Django 提供了 ?django.utils.deprecation.MiddlewareMixin
? 來方便創(chuàng)建同時(shí)兼容 ?MIDDLEWARE
?和舊的 ?MIDDLEWARE_CLASSES
?的中間件類,并支持同步和異步請(qǐng)求。Django 所包含的所有中間件類都兼容這兩種配置。
?mixin
?提供了一個(gè) ?__init__()
?方法,它需要一個(gè) ?get_response
?參數(shù),并將其存儲(chǔ)在 ?self.get_response
? 中。
?__call__()
? 方法:
self.process_request(request)
? (如果被定義過)。self.get_response(request)
? 來從后續(xù)的中間件和視圖得到響應(yīng)。self.process_response(request, response)
? (如果被定義過)。如果和 ?MIDDLEWARE_CLASSES
?一起使用,?__call__()
?方法將永遠(yuǎn)不會(huì)被使用;Django 會(huì)直接調(diào)用 ?process_request()
? 和 ?process_response()
?。
在大多數(shù)情況下,從這個(gè) ?Mixin
?中繼承就足以使一個(gè)舊式中間件與新系統(tǒng)兼容,并具有足夠的向后兼容性。新的短路語義對(duì)現(xiàn)有中間件無害甚至有益。在少數(shù)情況下,中間件類可能需要一些改變來適應(yīng)新的語義。
?MIDDLEWARE
?和 ?MIDDLEWARE_CLASSES
?在使用上有些行為差異:
MIDDLEWARE_CLASSES
?下,每個(gè)中間件將始終調(diào)用它的 ?process_response
?方法,即使早期的中間件通過從其 ?process_response
?方法返回響應(yīng)而短路。?MIDDLEWARE
?下,中間件行為更像洋蔥:響應(yīng)在輸出時(shí)經(jīng)過的層與在輸入時(shí)看到請(qǐng)求的層相同。如果一個(gè)中間件短路,只有那個(gè)中間件和之前的中間件可以看到響應(yīng)。MIDDLEWARE_CLASSES
?下,?process_exception
?應(yīng)用于中間件 ?process_request
?方法引發(fā)的異常。在 ?MIDDLEWARE
?下,?process_exception
?只應(yīng)用于視圖引發(fā)的異常(或者從 ?TemplateResponse
?的 ?render
?方法引發(fā)的異常)。中間件引發(fā)的異常被轉(zhuǎn)換為合適的 HTTP 響應(yīng),然后傳遞到下一個(gè)中間件。MIDDLEWARE_CLASSES
?下,如果 ?process_response
?方法引發(fā)了異常,所有更早之前的中間件的 ?process_response
?方法會(huì)被跳過,并一直返回 ?500 Internal Server Error
? 的 HTTP 響應(yīng)(即使引發(fā)的異常是例如 Http404 )。在 ?MIDDLEWARE
?,一個(gè)中間件引發(fā)的異常將立刻被轉(zhuǎn)換為合適的 HTTP 響應(yīng),然后下一個(gè)中間件將看到響應(yīng)。中間件不會(huì)因?yàn)橹虚g件引發(fā)異常而被跳過。Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: