Django之请求生命周期
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列表中的中间件类逆序执行
(5)process_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次。
2、URL访问过滤
如果用户访问的是login视图(放过)
如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!
Django之请求生命周期的更多相关文章
- Django的请求生命周期
Django的请求生命周期 请求生命周期 请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情. 1.客户端发送Http请求 2 .服务器接收,根据请求 ...
- Django 框架 django的请求生命周期
概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- Django框架请求生命周期
先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校 ...
- Django的请求生命周期与中间件中的5中方法
请求生命周期: 客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端 中间件: 在全局层明处理请求和响应的 form djang ...
- 【转】Django框架请求生命周期
https://www.cnblogs.com/gaoya666/p/9100626.html 先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行 ...
- Django Http请求生命周期
day54 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中的的url在路由关系表中进行匹配(从上到下) 3.匹配成功后,执行指定的views函数 4.业务处理 URL----&g ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- Django组件 - Django请求生命周期、中间件
一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...
随机推荐
- auth权限逻辑
下面本人为大家讲解一下如何实现auth权限, 第一步,新建Auth.php,复制下面的代码,把注释中的表都创建一下.把文件放到extend新建文件夹org放进去即可, <?php // +--- ...
- 安卓微信浏览器中window.location.href失效的问题
最近接手一微信项目,测试功能时,发现跳转在android手机上不动了.iso系统可以正常跳转的.解决方法: window.location.href = url + '?v=' + (new Date ...
- poj_2393 Yogurt factory 贪心
Yogurt factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16669 Accepted: 8176 D ...
- 【Linux常见命令】pwd命令
pwd - print name of current/working directory pwd命令用于显示工作目录. 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. 语法:pwd [ ...
- 01-复杂度2 Maximum Subsequence Sum
01-复杂度2 Maximum Subsequence Sum (25分) 时间限制:200ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:陈越 单位:浙江大学 htt ...
- 关于 cmd 命令运行时发现错误(已加 classpath): 找不到或无法加载主类 xxx.class 原因: Java .lang.ClassNotFoundException: xxx.class
我的是这个代码,出现了,无法加载主类的问题,查看了一些回答,有的是说要删除包名(我的没有带包,所以不是这个问题),还有的是说classpath的配置有问题,但是我的java ,javac测试jdk的时 ...
- Nginx比SRS做得好的地方
在nginx.org文档中,摘录了一篇nginx介绍的文章,Chapter “nginx” in “The Architecture of Open Source Applications”,这篇文章 ...
- ACM模板合集
写在前面: 第一年小白拿铜牌,第二年队友出走,加上疫情原因不能回校训练导致心底防线彻底崩盘,于是选择退役. 自从退役之后,一直想我打了那么久的ACM,什么也没留下觉得很难受,突然想到我打ACM的时候, ...
- 面试被问为什么使用Spring Boot?答案好像没那么简单
面试官:项目中有使用Spring Boot吗? 小小白:用过. 面试官:说一下为什么要使用Spring Boot? 小小白:在使用Spring框架进行开发的过程中,需要配置很多Spring框架包的依赖 ...
- linux关于suid提权笔记
suid全称是Set owner User ID up on execution.这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执 ...