中间件( 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',
]
 

猜你喜欢

转载自www.cnblogs.com/liu--huan/p/10008340.html
今日推荐