Django中間件的執行順序

Django中間件的執行順序

Middleware(中間件)

Middleware並不是Django所獨有的東西,在其他的Web框架中也有這種概念。在Django中,Middleware可以滲入處理流程的四個階段:request,view,response和exception,相應的,在每個Middleware類中都有process_request,process_view, process_response 和 process_exception這四個方法。你可以定義其中任意一個活多個方法,這取決於你希望該Middleware作用於哪個處理階段。每個方法都可以直接返回response對象。

Middleware是在Django BaseHandler的load_middleware方法執行時加載的,加載之後會建立四個列表作爲處理器的實例變量:
(1)_request_middleware:process_request方法的列表
(2)_view_middleware:process_view方法的列表
(3)_response_middleware:process_response方法的列表
(4)_exception_middleware:process_exception方法的列表

Django的中間件是在其配置文件(settings.py)的MIDDLEWARE_CLASSES元組中定義的。在MIDDLEWARE_CLASSES中,中間件組件用字符串表示:指向中間件類名的完整Python路徑。
例如

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Django項目的安裝並不強制要求任何中間件,如果你願意,MIDDLEWARE_CLASSES可以爲空。中間件出現的順序非常重要:在request和view的處理階段,Django按照MIDDLEWARE_CLASSES中出現的順序來應用中間件,而在response和exception異常處理階段,Django則按逆序來調用它們。也就是說,Django將MIDDLEWARE_CLASSES視爲view函數外層的順序包裝子:在request階段按順序從上到下穿過,而在response則反過來。以下這張圖可以更好地幫助你理解:
在這裏插入圖片描述

原文鏈接:https://blog.csdn.net/winfred_hua/article/details/103792076

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章