• Django【进阶】中间件


    中间件
     

    一、概念

    django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

    其中process_view方法用的较少,process_template_response方法一般不会用
    注意:中间件中的五个方法是固定的,使用时注意参数
     
     

    二、创建中间件

    推荐下面这个方法,上面方法会被废弃(不继承了,直接把继承的内容拿过来)
     
     
    中间件在settings配置里面注册
     
     

    三、中间件方法介绍

    process_response一定要有返回值的(response),因为中间件的执行顺序,先执行每个中间件的process_request,执行完视图函数后(视图函数执行完也有返回值,返回值为response),再倒着通过每个中间件的process_response把response传递出来,process_response可以对response进行修改,例如:给响应体加上了响应头, 所以response可能和视图函数返回的response不一样
     
    但是process_request不要轻易有返回值,如果有返回值,就直接走到当前中间件的process_response,而不会走到视图函数
     
     
    process_view方法
    如果process_view方法有返回值,则执行顺序为:
     
     
    process_exception:如果视图函数出错,为了不返回错误页面,就执行这个方法,这个方法可以写一个很友好的返回信息给用户,但是如果视图函数的异常自己捕捉到,就不用了,直接到process_response
     

     

    四、应用实例:用中间件实现用户验证

    所有的页面都验证,如果未登录,就跳转到登录页面,把不需要验证的页面排除到验证之外,如下:


    五、中间件概要总结

    a. 中间件是一个类,有五个固定的方法
    - process_request
    - 有,直接执行当前中间件和上方中间件的process_response
    - 无
    应用: 用户登录授权(排除不需要登录的url)
    - process_response
    - 必须有返回值
     
    - process_view
     
    - process_exception
     
    - process_tempalte_response
    - 必须有返回值
    - 必须对象中要有render方法
     
    b. 流程
     
    c. 什么时候用中间件?所有请求统一做处理时使用
    - 登录验证
     
    d. 中间件中的方法,可以有任意个




  • 相关阅读:
    中文转码问题总结
    Linux命令总结
    Maven实战系列文章目录
    JXL API总结
    docker 中安装mysql8之后无法远程连接的问题caching-sha2-password
    springboot查数据并以csv格式现在到本地
    aop
    java.lang.ClassNotFoundException: org.aspectj.lang.JoinPoint
    shiro框架中获取username、ip等信息
    cron
  • 原文地址:https://www.cnblogs.com/lucaq/p/7581234.html
Copyright © 2020-2023  润新知