Django中间件的实现方法
1、掌握内容
process_request
-
1.请求来的时候需要经过每一个中间件里面的process_request方法 结果的顺序是按照配置文件中注册的中间件从上往下的顺序依次执行
-
2.如果中间件里面没有定义该方法,那么直接跳过执行下一个中间件
-
3.如果该方法返回了HttpResponse对象,那么请求将不再继续往后执行,而是原路返回(用例:校验失败不允许访问...)
process_request方法就是用来做全局相关的所有限制功能
process_response
-
1.响应走的时候需要经过每一个中间件里面的process_response方法 该方法有两个额外的参数request、response
-
该方法必须返回一个HttpResponse对象
-
1.默认返回的就是形参response
-
2.可以自定义返回参数
-
-
3.顺序是按照配置文件注册了的中间件从下往上依次经过,如果没有定义,则执行下一个
研究如果在第一个process_request方法就已经返回了HttpResponse对象,那么响应走的时候经过所有中间件里面的process_response 或者 有其他情况
是其他情况:
会直接走同级别的process_response 返回
flask框架也有一个中间件,但是规律不同:
只要返回了数据就必须经过所有中间件里面的类似与process_response 的方法
2、了解内容
process_view
- 自动执行中间件里面的该方法的时刻:路由匹配成功之后执行视图函数之前
- 顺序是按照配置文件中注册的中间件从上往下的顺序依次执行
process_template_response
- 返回的HttpResponse对象中有render属性的时候才会触发
- 顺序是按照配置文件中注册了的中间件从下往上依次经过
- 当视图函数中出现异常的情况下触发
- 顺序是按照配置文件中注册了的中间件从下往上异常经过