# 中間件
* 是一個輕量級、底層的插件系統,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出
* 激活:添加到django配置文件中的MIDDLEWARE\_CLASSES元祖中
* 每個中間件組件是一個獨立的python類,可以定義下面方法中的一個或多個
* \_\__int_\_\_:無序任何參數,服務器響應第一個請求的時候調用一次,用于確定是否啟用當前中間件
* process\_request\(request\):執行視圖之前被調用,每個請求上調用,返回None或HttpResponse對象
* process\_\_view\(request,view\_func,view\_args,views\_kwargs\):調用視圖之前被調用,在每個請求上調用,返回None或HttpResponse對象
* process\__template\_response\(request,response\):_在視圖剛好執行完畢之后被調用,在每個請求上調用,返回實現了render方法的響應對象
* process\_response\(request,response\):所有響應返回瀏覽器之前被調用,在每個請求上調用,返回HttpResponse對象
* process\_exception\(request,respone,exception\):當視圖拋出異常時調用,在每個請求上調用,返回一個HttpResponse對象
* 使用中間件,可以干擾整個處理過程,每次請求中都會執行中間件的這個方法
* 示例:獲取參數
* 與settings.py同級目錄下創建
```text
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class myMiddle(MiddlewareMixin):
def process_exception(self,request,response,exception):
return HttpResponse(exception.message)
def process_request(self,request):
print('get參數為',request.GET.get('a'))
```
* 將類myMiddle注冊到settings.py文件中
```text
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',
'middleware.myApp.myMiddle.MyMiddle',
]
```
* 執行視圖之前被調用,每個請求上調用,會返回一個參數值或None