settings.py中间件执行

自定义中间件的配置:

(1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin

(2)在py文件中自定义中间件类,必须继承 MiddlewareMixin 类

(3)在settings.py文件的MIDDLEWARE列表中进行配置,追加新建的中间件py文件类

自定义中间件类中定义的五个方法:

(1)process_request(self, request)【常用】

·         wsgi.py进行socket封装之后,urls.py控制器路由分发之前,对所有的请求对象request都执行的函数

·         process_request函数参数中要有封装好的request对象,这视图函数的request一样

·         process_request方法是按MIDDLEWARE列表中的中间件类顺序执行

·         如果想指定请求绕过此中间件的该方法,可设置白名单进行请求判断

·         process_request函数只有在无返回值或者返回值为None时才会继续执行后续中间件的process_request方法,否则就会终止后续程序执行,直接返回该return的response对象

(2)process_view(self,request,view_func,view_args,view_kwargs)

·         urls.py控制器路由分发之后,views.py视图函数执行之前

·         process_view函数参数中要有封装好的request对象,视图函数名view_func,视图函数参数view_args,view_kwargs

·         process_view方法是按MIDDLEWARE列表中的中间件类顺序执行

(3)process_exception(self,request,exception)

·         views.py视图函数执行过程中,捕获异常,自动触发

·         process_exception函数参数要有封装好的request对象,异常类型exception

·         process_exception方法方法是按MIDDLEWARE列表中的中间件类逆序执行

(4)process_template_response(self,request,response)

·         views.py视图函数执行过程中,response对象中必须定义了render()方法

·         process_template_response函数参数要有封装好的request对象和响应的response对象

·         process_template_response方法是按MIDDLEWARE列表中的中间件类逆序执行

5process_response(self,request,response)【常用】

·         views.py视图函数执行响应response对象,wsgi.py响应send之前,对所有的响应对象response都执行的函数

·         process_response函数参数要有封装好的request对象和响应的response对象

·         process_response方法是按MIDDLEWARE列表中的中间件类逆序执行

·         在process_response函数中必须加上return,否则报错,return response是视图函数响应对象时,会进行接力响应,如果在任意process_response中rerun了自定义的内容,响应结果即为MIDDLEWARE列表中索引最小的中间件类的return结果

自定义中间件类方法执行顺序

中间件的应用案例:

1、做IP访问频率限制

某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

2URL访问过滤

如果用户访问的是login视图(放过)

如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!

最新文章

  1. PSI and index do not match: PSI and index do not match
  2. xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368)
  3. Jsonp跨域访问原理和实例
  4. Hibernate-入门教程
  5. C#:将子Form加入父Form中
  6. AndroidManifest.xml中的android:name是否带.的区别
  7. Trucking(HDU 2962 最短路+二分搜索)
  8. Awesome Delphi
  9. dsbskrhkme看么哦么
  10. Jenkins+Git配置
  11. Java 自增(++) 和 C语言中自增的区别
  12. 51nod 1376 最长递增子序列的数量(线段树)
  13. BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash
  14. 如何删除git远程仓库项目的所有内容,重新提交所有内容
  15. 二次剩余Cipolla算法学习笔记
  16. tomcat: 类加载器
  17. ueditor在线编辑器的简单使用-上传图片
  18. 七、.net core下配置、数据库访问等操作实现
  19. mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  20. python两个字典合并,两个list合并

热门文章

  1. windows 删除非法目录
  2. Spring5参考指南:Bean的生命周期管理
  3. 【Linux删除问题】Operation not permitted
  4. App《最美诗词》开发 -- Java后端(整合框架)
  5. Xapian实战(二):core concepts
  6. 如何将PHP7达到最高性能
  7. 练习//编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组
  8. 记录:通过ffmpeg rtsp转 http m3u8
  9. 【Linux基础总结】Linux基本命令
  10. mongodb windows 集群搭建