zoukankan      html  css  js  c++  java
  • django中间件

    1.what is 中间件?

    • 是一个Python类,用来在全局范围内处理请求和响应的一个钩子.
    • 它是一个轻量低级别的插件系统,用于在全局范围内改变Django的输入出。每个中间件组件都负责做一些特定的功能。
    • 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',
      ]

    2.自定义组件

    • django中自带的自定义组件:
    • from django.utils.deprecation import MiddlewareMixin
      class CsrfViewMiddleware(MiddlewareMixin):
      
       def process_request(self, request):
              csrf_token = self._get_token(request)
              if csrf_token is not None:
                  # Use same token next time.
                  request.META['CSRF_COOKIE'] = csrf_token
    • 然后在django的配置文件settings中把上面的文件的路径添加到MIDDLEWARE中即可:
    • settings
      
      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.middleC.Login'
      ]
    • diango的中间件就是定义一个类,继承MiddlewareMixin类,这个类中有五个方法;分别给出他们什么时间执行,执行顺序,返回值:
      • process_request:
      • 1.执行时间:在视图函数views执行之前
        2.参数:request -->跟视图函数一致,都是一个对象,可以对其封装属性
        3.执行顺序:多个中间件时,按照注册顺序执行,
        4.返回值:
            None:正常流程,依次往下走;
            return response对象,会直接从这结束,视图函数也不会执行,开始返回给浏览器一个response对象;
          当前中间件之后的中间件的request方法都不执行;所以也没有response方法;
      • process_response:
      • 执行时间:在views函数之后调用,
        参数:(request,response)
        返回值:这里因为是在views函数之后调用,所以要接收一个response对象要返回;
        执行顺序:对个中间件时,按注册顺序倒序执行,
      • process_view:
      • 执行时间:在request之后,正则匹配执行views之前;
        参数:(request, callback, callback_args, callback_kwargs)
            callback:是正则匹配后的调用函数,
            callback_args, callback_kwargs:是该函数的参数;
        顺序:按注册顺序正序执行;
        返回值:
            None:正常走;
            response对象:上面的的views方法中如果有return HttpResponse,就停止执行下一个中间件的views方法,
           但是不干扰其他request或者response方法;
      • process_exception(self, request, exception):
      • 执行时间:有异常才会触发;在views执行之后,response之前;
        参数:(self, request, exception):exception是错误信息对象;
        执行顺序:按照注册顺序倒序;
        返回值:跟process_view方法一样,
      • process_template_response(self,request,response):
      • 执行时间:触发事件(views函数中的response对象有render方法),在视图函数之后,在process_response之前;
        执行顺序:倒序执行
        返回值:返回response,在views里的函数也要有返回response对象;
      • def index(request):
            print('这是index的方法')
            ret = HttpResponse('ok')
        
            def fn():
                print('')
                return ret  或则 httpresponse('ok')
        
            ret.render = fn
        
            return ret
  • 相关阅读:
    eclipse中的项目无法在build/classes目录下生成.class字节码
    nginx的权限问题(Permission denied)解决办法
    application/x-www-form-urlencoded、application/json、multipart/form-data、text/xml简单总结
    jackson的使用和详解
    博客园自定义样式
    java基础
    k8s
    系统服务构建运维
    私有云技术
    工程文档编写
  • 原文地址:https://www.cnblogs.com/0627zhou/p/9792728.html
Copyright © 2011-2022 走看看