Django中中介軟體的使用
阿新 • • 發佈:2019-02-08
Django中的中介軟體是一個輕量級、底層的外掛系統,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了Django框架的健壯性。
我們可以使用中介軟體,在Django處理檢視的不同階段對輸入或輸出進行干預。(相當於Flask中的請求鉤子)
中介軟體使用裝飾器來實現,使用裝飾器來裝飾檢視函式,完成中介軟體的功能。
一 、定義中介軟體
# 1.定義中介軟體(裝飾器) def my_middleware(get_response): # 初始化操作 print('init操作') # debug執行模式會初始化兩次 def middleware(request): # 呼叫檢視函式之前的邏輯處理 print('呼叫檢視函式之前的邏輯處理') response = get_response(request) # 呼叫檢視函式 # 呼叫檢視函式之後的處理邏輯 print('呼叫檢視函式之後的處理邏輯') return response return middleware
二、定義好中介軟體後,需要在settings.py 檔案中添加註冊中介軟體
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'user.middleware.my_middleware' # 新增中介軟體 ]
三、測試,定義的中介軟體對每個檢視函式都有作用,一旦檢視函式被呼叫,中介軟體就被觸發,可以在控制檯檢視列印效果
def demo_view(request):
print('view 檢視被呼叫')
return HttpResponse('OK')
注意:Django執行在除錯模式下,中介軟體init部分有可能被呼叫兩次。
四、多箇中間件的執行順序
- 在請求檢視被處理前,中介軟體由上至下依次執行
- 在請求檢視被處理後,中介軟體由下至上依次執行
def my_middleware(get_response): print('init 被呼叫') def middleware(request): print('before request 被呼叫') response = get_response(request) print('after response 被呼叫') return response return middleware def my_middleware2(get_response): print('init2 被呼叫') def middleware(request): print('before request 2 被呼叫') response = get_response(request) print('after response 2 被呼叫') return response return middleware
4.2註冊新增兩個中介軟體
'users.middleware.my_middleware', # 新增
'users.middleware.my_middleware2', # 新增
4.3執行結果
init2 被呼叫
init 被呼叫
before request 被呼叫
before request 2 被呼叫
view 檢視被呼叫
after response 2 被呼叫
after response 被呼叫