中介軟體( MiddlewareMixin )與 csrf
阿新 • • 發佈:2018-11-23
中介軟體( MiddlewareMixin )
from django.utils.deprecation import MiddlewareMixin
中介軟體是什麼
請求和響應之間的一道屏障
中介軟體的作用
控制請求和響應
中介軟體的執行順序
process_request 請求的時候,從上往下執行 如果return HttpResponse 的物件,直接返回了 如果return None 繼續往下走
process_response ,從下往上執行 必須 return HttpResponse的物件
中介軟體的方法
def process_request(self,request): 請求來的時候,響應執行 def process_response(self,request,response): 響應回去的時候,執行 中介軟體1直接 return HttpResponse物件 直接走走自己的 response def process_view( 瞭解 ) request, callback(檢視函式), callback_args(無名分組的引數), callback_kwargs(有名分組的引數) def process_view(self,request,callback,callback_args,callback_kwargs):print(callback) # 檢視層函式記憶體地址 print(callback_args) # 接受路由無名分組引數 print(callback_kwargs) # 接受路由有名分組引數 ret = callback(request) # 執行檢視層函式 return ret def process_exception(self, request, exception)( 瞭解 ) # 接受錯誤資訊
# 該方法對檢視函式的返回值又要求,必須是一個含有render方法類的物件,才會執行此方法 [ 例如以下例子 ]
defprocess_template_response(self, request, response) (瞭解)
class Test():
def render(self):
return HttpResponse('test')
def test_middle(request): # 會觸發render函式的執行
return Test()
自定義中介軟體
先繼承 MiddlewareMixin 這個類
先匯入模組: from django.utils.deprecation import MiddlewareMixin
寫中介軟體和中介軟體的常用方法
class MyMiddelware(MiddlewareMixin): def process_request(self,request): #傳送請求來的時候執行 print('我是Middleware ----- 1 process_request ') return None def process_response(self,request,response): #響應回去的時候執行 print('我是Middleware ----- 1 process_response ') return response def process_view(self,request,callback,callback_args,callback_kwargs): print(callback) print(callback_args) print(callback_kwargs) ret = callback(request) return ret # 捕捉異常資訊 def process_exception(self,request,exception): print(exception) # 該方法對檢視函式的返回值又要求,必須是一個含有render方法類的物件,才會執行此方法 def process_template_response(self,request,response): return response
註冊中介軟體
django中的中介軟體
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', ]