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 ...
随机推荐
- 用百度AI平台接口实现OCR文字识别
目录 一.接入指南 1.注册 2.登录 3.创建应用 二.安装接口模型 三.编写python代码 四.识别结果 一.接入指南 若想利用百度AI开放平台进行软件开发,首先应成为百度AI开放平台的开发者. ...
- js 实现对象的混合与克隆效果,带完整版解析代码[helpers.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 对象混合 ...
- css之Grid Layout详解
css之Grid Layout详解 CSS Grid Layout擅长将页面划分为主要区域,或者在从HTML基元构建的控件的各个部分之间定义大小,位置和图层之间的关系. 与表格一样,网格布局使作者能够 ...
- 你知道吗?iOS不少程序常传送装置信息给第三方
2019独角兽企业重金招聘Python工程师标准>>> 华盛顿邮报( The Washington Post)与隐私程序开发商Disconnect共同进行的研究揭露,许多iOS程序其 ...
- 控制台报错 [WDS] Disconnected!
Webpack 的 HMR 功能,是通过 WebSocket 实现的推送 JSON Patch,同时需要第三方库支持. 具体解决方案: 热加载(HMR)是 Webpack Dev Server 最强大 ...
- Android 项目 Android 学习手册(一)
前言: 当每次查询android 知识的时候,内心是凌乱的,总觉得要是有一个工具多好, 尤其在手机端如何可以查询的话,会非常完美,能大大减少选择查询的时间, 之前见了很多java 学习手册,把一些重要 ...
- winform练习-通过遍历Control容器中的对象统一委托事件-楼盘选择器
1.窗体布局如下,一个label标签内容如下,一个btnSave按钮,用于保存,其他九个按钮用于选择楼盘. 2. 按钮存于Control容器中,编写方法遍历容器中的button,通过条件过滤掉不是bu ...
- Codeforce-Ozon Tech Challenge 2020-A. Kuroni and the Gifts
the i-th necklace has a brightness ai, where all the ai are pairwise distinct (i.e. all ai are diffe ...
- 获取Wi-Fi的SSID
前几天做项目的时候,碰到一个问题,获取wifi的SSID,其实就是获取Wi-Fi的名字 iOS12以前 在iOS13之前获取wifi的SSID很简单,苹果提供了接口CNCopyCurrentNetwo ...
- Ubuntu开机黑屏解决办法
联想笔记本通过虚拟机安装Ubuntu12.04后,开机黑屏.这个问题和NVIDIA显卡有关.网上有人提到更改/etc/default/grub文件,可是我通过root身份也无法很好地修改该文件,遂放弃 ...