Django生命周期与中间件
目录:
- Django中间件处理过程
- 生命周期图解
- Django生命周期请求过程
- 中间件使用举例
Django中间件处理过程
首先客户端发起请求,会将请求交给settings.py中排在最前面的中间件
- 前面中间件收到请求会调用类中的process_request方法处理,然后交给下一个中间件的process_request函数
- 到达最后一个中间件的process_request函数处理后会到达url路由系统
- 然后从路由系统直接跳转到第一个中间件的process_view函数,依次向后面中间的process_view传递,最后 到达views.py处理函数,获取网页中的数据
- 获取的数据会交给最后一个中间件的process_response方法处理,然后依次向前面的中间件process_response方法提交请求的内容,最后由最前面的中间件将请求数据返回到客户端
- 在任一中间件的process_request和process_view方法中有返回值就会直接返回给process_response
生命周期图解
Django生命周期请求过程
- 客户端访问
客户端在浏览器中输入url路径访问指定网页
- 请求发送给Django程序
首先会交给中间件,中间件处理后交给路由系统
Django程序会到urls.py文件中找到对应请求的处理函数(视图函数)
- 视图函数
视图函数会找到对应的html模板文件
然后到数据库中取得数据替换html模板中的内容
使用static中的js和css文件结合对html渲染
最后Django将最终渲染后的html文件返回给中间件
中间件再调用process_response方法处理,最后交给用户
中间件使用举例
创建存放中间件的文件夹
在工程目录下创建任意目录,这里创建路径为: /project/middle/m1.py
在project/settings.py文件中注册我们自己的中间件
MIDDLEWARE = ['middle.m1.Row1','middle.m1.Row2','middle.m1.Row3',
]
- 在views.py文件中写处理函数test
views.py处理函数
def test(request):# int('fds') #当views函数出现异常,中间件中的process_exception执行print('异常')return HttpResponse('ok')
- 在/project/middle/m1.py文件中定义中间件
from django.utils.deprecation import MiddlewareMixin
class Row1(MiddlewareMixin):def process_request(self,request):print('process_request_1')def process_view(self,request, view_func, view_func_args, view_func_kwargs):#view_func_args: url中传递的非字典的值会用这个变量接收#view_func_kwargs: url中传递的字典会传递到这个变量接收(如:nid=1)print('process_view_1')def process_response(self,request, response): #response就是拿到的返回信息print('response_1')return responsedef process_exception(self, request, exception):'''只有当views函数中异常这个函数才会执行'''if isinstance(exception, ValueError):return HttpResponse('>>出现异常了')class Row2(MiddlewareMixin):def process_request(self,request):print('process_request_2')#1 如果在Row2中的process_request中有返回值,那么就不会到达Row3#2 Row2直接将返回值交给自己的process_response再交给Row1的process_response#3 最后客户端页面显示的就是‘走’请求没机会到达views函数,不会打印‘没带钱’# return HttpResponse('走')def process_view(self,request, view_func, view_func_args, view_func_kwargs):print('process_view_2')def process_response(self,request, response):print('response_2')return responseclass Row3(MiddlewareMixin):def process_request(self,request):print('process_request_3')def process_view(self,request, view_func, view_func_args, view_func_kwargs):print('process_view_3')def process_response(self,request, response):print('response_3')return response
Django生命周期与中间件相关推荐
- Django 生命周期
1. 生命周期 Django 生命周期为: 用户请求发起对url的请求→ wsgiref模块→django中间件→django(视图url对应函数,模型数据库交互,html模版渲染)→django中间 ...
- Django框架(三)—— orm增删改查、Django生命周期
orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 ...
- Django框架(三)-- orm增删改查、Django生命周期
一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...
- Django生命周期
以下信息是个人理解所得,如要转载,请注明转载处! 生命周期?很多人会问生命周期是什么?Django也有生命周期吗?他就是一个框架呀. 我们先来说一说一个西瓜的生命周期,一个西瓜刚开始只是一个种子,种到 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
阅读目录 一.Django请求生命周期: 二.WEB开发模式: 三.cbv源码分析: 四.认识RESTful 补充知识:跨域 五.基于原生django开发restful的接口 六.drf安装.使用.A ...
- Django入门(二) 理解Django生命流程周期
接上篇:Django入门-项目创建与初识子应用 项目的数据库模型 这里我们先使用sqlite类型的数据库,后面在进行改变 创建数据库模型 名词: ORM(Object Ralational Mappi ...
- django请求生命周期,FBV和CBV,ORM拾遗,Git
一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post ...
- python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)
一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post ...
- django models索引_Django(生命周期、每部分详解、路由层)
https://www.zhihu.com/video/1248736141978927104 每日测验 """ 今日考题 1.什么是静态文件,django静态文件配置如 ...
最新文章
- Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法
- 迈向未来的那五种人,自古以来就很重要的人
- 转:Tomcat启动失败 提示Server Tomcat v7.0 Server at localhost failed to start.六种解决方法
- 推荐系统--矩阵分解(3)
- 现实版“奇异博士”?原来是这款神秘的“数学黑盒”
- 金融数学与计算机专业,金融数学专业就业方向及前景分析(解读)
- JQuery官方学习资料(译):类型
- 如何使用print()打印类的实例?
- 知道半径 两点角度 怎么求坐标
- mysql时间加8小时_劳斯莱斯库里南,超精致1:8模型车,组装时间长达450个小时...
- Bean 工厂和Application contexts有什么区别?
- 向已知EXCEL模板写入数据并导出
- AI算法工程师 | 04人工智能基础-高等数学知识强化(二)一元函数微分学
- Vue引入并使用Element-UI组件库的两种方式
- 2021CSDN粉丝年度严选文章TOP10榜单出炉~浅看超人气盘点
- 解决在iOS9上安装的软件显示未受信任的企业级开发者
- 科大讯飞离线语音命令词识别的使用说明
- 链接脚本.lds(详细)总结附实例快速掌握
- 【Hadoop】HBase 数据模型(Data Model)
- 12星座的出生年月日性格_十二个星座的出生年月日
热门文章
- Microsoft Azure云服务停机!系水泵未知原因关闭导致
- 赛迪数据:2018年数据中心市场数据
- 数据中心机房消防演练方案
- 柴油发电机组的基本结构及工作特性
- ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)
- Py之cairocffi:cairocffi的简介、安装、使用方法之详细攻略
- DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测
- 成功解决AttributeError: 'Word2Vec' object has no attribute 'index2word'
- Computer:MediaPreview的简介、安装、使用方法之详细攻略
- TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略