from django.utils.deprecation import middlewaremixin
最後在settings.py檔案裡新增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',
# 目錄名,檔名,類名
# 'middlewares.filterusermiddleware.mymiddleware',
'middlewares.filterusermiddleware.mywarea',
'middlewares.filterusermiddleware.mywareb',
'middlewares.filterusermiddleware.mywarec',
]
from django.shortcuts import render
from django.utils.deprecation import middlewaremixin
class mywarea(middlewaremixin):
def process_request(self, req):
print("中介軟體1的請求")
def process_response(self, req, response):
print("中介軟體1的返回")
return response
class mywareb(middlewaremixin):
def process_request(self, req):
print("中介軟體2的請求")
def process_response(self, req, response):
print("中介軟體2的返回")
return response
class mywarec(middlewaremixin):
def process_request(self, req):
print("中介軟體3的請求")
def process_response(self, req, response):
print("中介軟體3的返回")
return response
執行結果如下
ip白名單示例
from django.shortcuts import render
from django.utils.deprecation import middlewaremixin
class mymiddleware(middlewaremixin):
def process_request(self, req):
ip = req.meta.get("remote_addr")
# 白名單
white_ips = [
'61.144.96.111'
]if ip in white_ips:
return render(req, 'home.html', )
def home(req):
res = ['美女荷官']
return render(req, 'home.html', )
示例**
class mywarea(middlewaremixin):
def process_request(self, req):
print("中介軟體1的請求")
def process_response(self, req, response):
print("中介軟體1的返回")
return response
def process_view(self, req, callback, callback_args, callback_kwargs):
print("中介軟體1的view")
class mywareb(middlewaremixin):
def process_request(self, req):
print("中介軟體2的請求")
def process_response(self, req, response):
print("中介軟體2的返回")
return response
def process_view(self, req, callback, callback_args, callback_kwargs):
print("中介軟體2的view")
class mywarec(middlewaremixin):
def process_request(self, req):
print("中介軟體3的請求")
def process_response(self, req, response):
print("中介軟體3的返回")
return response
def process_view(self, req, callback, callback_args, callback_kwargs):
print("中介軟體3的view")
執行結果
其中request 是 httprequest 物件, response 是乙個由django view或者中介軟體返回的templateresponse 物件,process_template_response()在 view 使用 render 渲染乙個模版物件完成之後被呼叫,它必須返回乙個render 方法執行後的response物件。
Django 中介軟體
django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...
Django中介軟體
給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...
Django中介軟體
什麼是中介軟體?django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行...