中間鍵Middlewaredjango
01.中間件顧名思義:
是介於request與response處理之間的一道處理過程,相對比較輕量級,
而且在全局上改變django的輸入與輸出。由於改變的是全局,因此須要謹慎實用,用很差會影響到性能。服務器
02.自定義中間件session
中間件中一共有四個方法:
process_request
process_view
process_exception
process_responseapp
<1>建立一箇中間鍵.py文件函數
1 from django.utils.deprecation import MiddlewareMixin 2 class CustomerMiddleware(MiddlewareMixin): 3 4 def process_request(self, request): 5 # 請求發出後,進入,沒有返回值 6 print("CustomerMiddleware process_request") 7 #return HttpResponse("process_request中斷") 8 9 def process_response(self, request, response): 10 # 視圖函數走完以後進入,必須有返回值 11 print("CustomerMiddleware process_response") 12 return response # 返回的response必須加返回值,不然會報錯 13 14 def process_view(self, request, callback, callback_args, callback_kwargs): 15 #走過視圖以後進入_view 16 print("Md1view") 17 18 def process_exception(self, request, exception): 19 # 若是視圖函數有錯誤,則走_exception,加參數exception進行錯誤捕獲, 20 # 捕獲後將執行process.response 21 print("md1 process_exception...") 22 return HttpResponse(exception)
<2>在settings.py中添加本身的中間鍵所在的地址性能
發起請求 proccess_request ↓ 從上到下依次通過中間鍵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',
'app01.my_middlewares.CustomerMiddleware' # 添加本身的中間鍵:路徑.文件名.類名
]
視圖函數views process_response ↑ 從下到上依次通過中間鍵middlewarespa
03.應用案例code
一、作IP訪問頻率限制
某些IP訪問服務器的頻率太高,進行攔截,好比限制每分鐘不能超過20次。csrf
二、URL訪問過濾
若是用戶訪問的是login視圖(放過)
若是訪問其餘視圖,須要檢測是否是有session認證,已經有了放行,沒有返回login,這樣就免得在多個視圖函數上寫裝飾器了!中間件