1. 程式人生 > >Django多箇中間件的執行順序

Django多箇中間件的執行順序

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 return
response 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 被呼叫