Django多箇中間件的執行順序
阿新 • • 發佈:2019-01-14
Django中的中介軟體是一個輕量級、底層的外掛系統,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了Django框架的健壯性。
我們可以使用中介軟體,在Django處理檢視的不同階段對輸入或輸出進行干預。
多箇中間件的執行順序
- 在請求檢視被處理前,中介軟體由上至下依次執行
- 在請求檢視被處理後,中介軟體由下至上依次執行
-
-
示例:
定義兩個中介軟體
1 def my_middleware(get_response): 2 #此處編寫的程式碼僅在Django第一次配置和初始化的時候執行一次。 3 print('init 被呼叫') 4 def middleware(request): 5 # 此處編寫的程式碼會在每個請求處理檢視前被呼叫。 6 print('before request 被呼叫') 7 response = get_response(request) 8 # 此處編寫的程式碼會在每個請求處理檢視之後被呼叫。 9 print('after response 被呼叫') 10 returnresponse 11 return middleware 12 13 def my_middleware2(get_response): 14 print('init2 被呼叫') 15 def middleware(request): 16 print('before request 2 被呼叫') 17 response = get_response(request) 18 print('after response 2 被呼叫') 19 return response 20 return middleware
註冊新增兩個中介軟體
setting.py
1 MIDDLEWARE = [ 2 'django.middleware.security.SecurityMiddleware', 3 'django.contrib.sessions.middleware.SessionMiddleware', 4 'django.middleware.common.CommonMiddleware', 5 # 'django.middleware.csrf.CsrfViewMiddleware', 6 'django.contrib.auth.middleware.AuthenticationMiddleware', 7 'django.contrib.messages.middleware.MessageMiddleware', 8 'django.middleware.clickjacking.XFrameOptionsMiddleware', 9 'users.middleware.mzhy_middleware', # 新增 10 'users.middleware.my_middleware2', # 新增 11 ]
定義一個檢視函式測試
1 def demo_view(request): 2 print('view 檢視被呼叫') 3 return HttpResponse('OK')
中介軟體執行流程圖
從上圖可以看出來多箇中間件在註冊時的執行順序
執行結果
1 init2 被呼叫 2 init 被呼叫 3 before request 被呼叫 4 before request 2 被呼叫 5 view 檢視被呼叫 6 after response 2 被呼叫 7 after response 被呼叫