1. 程式人生 > >中介軟體( MiddlewareMixin )與 csrf

中介軟體( MiddlewareMixin )與 csrf

中介軟體( 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方法類的物件,才會執行此方法 [ 例如以下例子 ]
def
process_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',
]