zoukankan      html  css  js  c++  java
  • doraemon的python django的中间件(国庆大更新)

    ### 11.13  中间件
    
    中间件的定义:
    
    中间件是处理django的请求和相应的框架级别的钩子,本质上就是一个类
    
    中间件可以定义为五个方法:
    
    - 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)
    
    4个特征:执行时间、执行顺序、参数、返回值
    
    
    
    1.process_request(self,request)
    
    执行时间:视图函数之前
    
    参数:request   —— 》 和视图函数中是同一个request对象
    
    执行顺序:按照注册的顺序  顺序执行
    
    返回值:
    
    ​        None : 正常流程
    
    ​        HttpResponse: 后面的中间的process_request、视图函数都不执行,直接执行当前中间件中的process_response方法,倒叙执行之前的中间中process_response方法。
    
    
    
    2.process_response(self, request, response)
    
    执行时间:视图函数之后
    
    参数:
    
    ​    request   —— 》 和视图函数中是同一个request对象
    
    ​    response   ——》  返回给浏览器响应对象
    
    执行顺序:按照注册的顺序  倒叙执行
    
    返回值:
    
    ​        HttpResponse:必须返回response对象
    
    
    
    3.process_view(self, request, view_func, view_args, view_kwargs)
    
    执行时间:视图函数之前,process_request之后
    
    参数:
    
    ​        request   —— 》 和视图函数中是同一个request对象
    
    ​        view_func  ——》 视图函数
    
    ​        view_args   ——》 视图函数的位置参数
    
    ​        view_kwargs  ——》 视图函数的关键字参数
    
    执行顺序:按照注册的顺序  顺序执行
    
    返回值:
    
    ​        None : 正常流程
    
    ​        HttpResponse: 后面的中间的process_view、视图函数都不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。
    
    
    
    4.process_exception(self, request, exception)
    
    执行时间(触发条件):视图层面有错时才执行
    
    参数:
    
    ​        request   —— 》 和视图函数中是同一个request对象
    
    ​        exception   ——》 错误对象
    
    执行顺序:按照注册的顺序  倒叙执行
    
    返回值:
    
    ​        None : 交给下一个中间件取处理异常,都没有处理交由django处理异常
    
    ​        HttpResponse: 后面的中间的process_exception不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。
    
    
    
    5.process_template_response(self,request,response)
    
    执行时间(触发条件):视图返回的是一个templateResponse对象
    
    参数:
    
    ​    request   —— 》 和视图函数中是同一个request对象
    
    ​    response   ——》  templateResponse对象
    
    执行顺序:按照注册的顺序  倒叙执行
    
    返回值:
    
    ​        HttpResponse:必须返回response对象
    
    ![img](https://images2018.cnblogs.com/blog/867021/201804/867021-20180409214433968-2137571775.png)
    
    ![img](https://images2018.cnblogs.com/blog/1168194/201807/1168194-20180719084357413-1778333372.png)
  • 相关阅读:
    python运行出现TypeError: super() takes at least 1 argument (0 given)错误
    史上最全Python数据分析学习路径图
    Windows平台Python编程必会模块之pywin32
    PyMySQL的基本使用
    python:让源码更安全之将py编译成so
    最高分是多少
    哪些技术可以用在WEB开发中实现会话跟踪
    自定义输入模板
    JAVA中HashMap和Hashtable区别
    Java中ArrayList与LinkedList的区别
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11638584.html
Copyright © 2011-2022 走看看