• django 中间件操作


    什么是中间件?
    中间件是一个类.用来处理Django的请求和响应的框架级别的钩子
    中间件的定义方法
    五个方法:(process_request,process_reponse)
    process_request(self,request)
    process_view(self, request, view_func, view_args, view_kwargs)
    process_template_response(self,request,response)
    process_exception(self, request, exception)
    process_response(self, request, response)
    用法:
    1,引入from django.utils.deprecation import MiddlewareMixin
    2,定义类,并继承MiddlewareMixin
    class MD1(MiddlewareMixin):
    函数
    3,在setting中进行注册
    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.my_middlewares.MD2', 
        'app01.my_middlewares.MD1',
    ]
     
    1,processs_request:
    1,执行时间:
    在视图之前执行
    2,参数:
    request 和视图中的request是同一个
    3,返回值:
    返回None 默认 也是常用
    返回reponse对象
    不执行后面中间的process_request方法和视图
    直接执行当前中间件的process_response方法
    4,执行顺序
    按照注册的顺序执行
    2,process_response
    1,执行时间:
    在视图函数执行之后
    2,request,response
    request和视图中的request是同一个
    response返回的response对象
    3,返回值
    返回response对象 必须要写
    4,执行顺序:
    按照注册顺序倒序
    3,process_view
    1,执行时间;
    在视图函数之前 process_request
    2,参数:
    view_func 将要执行的视图含函数
    view_args 视图函数的可变长位置的参数
    view_kwargs 视图函数的可变长关键参数
    3,返回值
    返回None
    返回response 不执行后面的process_view和视图
    直接执行所有中间件的process_reponse方法
    4,执行顺序
    按照注册顺序执行
    4,processs_exception(触发条件:有错误)
    1,执行时间
    在视图函数之后,process_response之前执行
    2,参数:
    exception 错误对象
    3,返回值:
    返回: None 不对错误进行处理 交给下一个中间件处理 如果没有交给django
    返回 response 对象 下一个中间的process_exception不执行,直接执行所有中间件pricess_response
    4,执行顺序:
    按照注册的倒序执行
    5,process_template_response(条件触发:视图返回的response有render方法)
    1,执行时间
    在视图函数之后,process_response之前执行
    2,参数:response
    3,返回值
    返回response对象
    4,执行顺序:
    按照注册的倒序执行,执行完所有的process_template_response方法后执行
    请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法,process_request方法返回的值是None,就依次执行,如果返回的值是HttpResponse对象,不再执行后面的process_request方法,而是执行当前对应中间件的process_response方法,将HttpResponse对象返回给浏览器。也就是说:如果MIDDLEWARE中注册了6个中间件,执行过程中,第3个中间件返回了一个HttpResponse对象,那么第4,5,6中间件的process_request和process_response方法都不执行,顺序执行3,2,1中间件的process_response方法。
     
    process_request方法都执行完后,匹配路由,找到要执行的视图函数,先不执行视图函数,先执行中间件中的process_view方法,process_view方法返回None,继续按顺序执行,所有process_view方法执行完后执行视图函数。假如中间件3 的process_view方法返回了HttpResponse对象,则4,5,6的process_view以及视图函数都不执行,直接从最后一个中间件,也就是中间件6的process_response方法开始倒序执行。
    process_template_response和process_exception两个方法的触发是有条件的,执行顺序也是倒序。总结所有的执行流程如下:
     
     
     
    流程图
     

  • 相关阅读:
    c语言宏
    vim的跨文件复制粘贴
    c语言文件包含
    CSS Modules 解决 react 项目 css 样式互相影响的问题
    react 执行 yarn build 页面无法显示
    create-react-app 引入 antd 及 解决 antd 样式无法显示的bug
    yarn 和 npm 的区别
    create-react-app项目添加less配置
    react 项目实战(十)引入AntDesign组件库
    react 项目实战(九)登录与身份认证
  • 原文地址:https://www.cnblogs.com/lnrick/p/9692945.html
Copyright © 2020-2023  润新知