Django4.0 中間件-其他中間件鉤子

2022-03-16 17:59 更新

除前面說的基礎請求/響應中間件模式外,你可以給基于類的中間件添加三種其他特殊方法:

process_view()

process_view(request, view_func, view_args, view_kwargs)

?request? 是一個 ?HttpRequest ?對象。?view_func ?是一個 Django 將要使用的 Python 函數。(這是一個真實的函數對象,不是函數的名稱);?view_args ?是一個用來傳遞給視圖的位置參數列表,;?view_kwargs ?是一個用來傳遞給視圖的關鍵字參數字典。?view_args ?和 ?view_kwargs ?都不包含第一個視圖參數 ( ?request ?)。
?process_view()? 只在 Django 調用視圖前被調用。
它應該返回 ?None ?或 ?HttpResponse ?對象。如果它返回 ?None ?,Django 將繼續(xù)處理這個請求,執(zhí)行任何其他的 ?process_view()? ,然后執(zhí)行相應的視圖。如果它返回 ?HttpResponse ?對象,Django 不會去影響調用相應的視圖;它會將響應中間件應用到 ?HttpResponse ?并返回結果。

注解:在視圖運行前或在 ?process_view()? 內訪問中間件里的 ?request.POST? 將阻止中間件之后運行的任何視圖修改請求的上傳處理程序 (?modify the upload handlers for the request? ),通常應該避免這樣。

?CsrfViewMiddleware ?類可以被視為一個例外,因為它提供 ?csrf_exempt()? 和 ?csrf_protect()? 裝飾器,它們允許視圖完全控制 ?CSRF ?驗證在什么時候進行。

process_exception()

process_exception(request, exception)

?request ?是一個 ?HttpRequest ?對象。 ?exception ?是一個由視圖函數引發(fā)的 ?Exception? 對象。
當視圖引發(fā)異常時,Django 會調用 ?process_exception()?。?process_exception()? 應該返回 ?None ?或 ?HttpResponse ?對象。如果它返回一個 ?HttpResponse ?對象,模板響應和響應中間件將被應用且會將結果響應返回瀏覽器。否則,就會開始默認異常處理( ?default exception handling? )。
再次,中間件在響應階段會按照相反的順序運行,其中包括 ?process_exception ?。如果異常中間件返回一個響應,那么中間件之上的中間件類的 ?process_exception ?方法根本不會被調用。

process_template_response()

process_template_response(request, response)

?request ?是一個 ?HttpRequest ?對象。?response ?是 ?TemplateResponse ?對象(或者等效對象),它通過 Django 視圖或中間件返回。
?process_template_response()? 在視圖被完全執(zhí)行后調用,如果響應實例有 ?render()? 方法,表明它是一個 ?TemplateResponse ?或等效對象。
它必須返回一個實現了 ?render ?方法的響應對象。它可以通過改變?response.template_name?和 ?response.context_data? 來改變給定的 ?response ?,或者它可以創(chuàng)建和返回全新的 ?TemplateResponse ?或等效對象。
你不需要顯式地渲染響應——一旦所有模板中間件被調用,響應會被自動渲染。
中間件會在響應階段按照相反的順序運行,其中包括 ?process_template_response()? 。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號