(1)定義乙個中介軟體工廠函式,然後返回乙個可以被呼叫的中介軟體。
(2)中介軟體工廠函式需要接收乙個可以呼叫的get_response物件。
(3)返回的中介軟體也是乙個可以被呼叫的物件,並且像檢視一樣需要接收乙個request物件引數,返回乙個response物件。
例:定義:
def ******_middleware(get_response):
# 此處編寫的**僅在django第一次配置和初始化的時候執行一次。
def middleware(request):
# 此處編寫的**會在每個請求處理檢視前被呼叫。
response = get_response(request)
# 此處編寫的**會在每個請求處理檢視之後被呼叫。
return response
return middleware
註冊:
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',
'book.middleware.******_middleware', # 新增中介軟體
]
多個中介軟體時候,順序與裝飾器順序相似。
請求前只執行一次的:從下到上
請求前執行的:從上到下
請求後執行的:從下到上
例:定義兩個中介軟體
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
註冊新增兩個中介軟體
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',
'users.middleware.my_middleware', # 新增
'users.middleware.my_middleware2', # 新增
]
執行結果
init2 被呼叫
init 被呼叫
before request 被呼叫
before request 2 被呼叫
view 檢視被呼叫
after response 2 被呼叫
after response 被呼叫
Django 中介軟體
django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...
Django中介軟體
給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...
Django中介軟體
什麼是中介軟體?django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行...