目录:

  • 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生命周期与中间件相关推荐

  1. Django 生命周期

    1. 生命周期 Django 生命周期为: 用户请求发起对url的请求→ wsgiref模块→django中间件→django(视图url对应函数,模型数据库交互,html模版渲染)→django中间 ...

  2. Django框架(三)—— orm增删改查、Django生命周期

    orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 ...

  3. Django框架(三)-- orm增删改查、Django生命周期

    一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...

  4. Django生命周期

    以下信息是个人理解所得,如要转载,请注明转载处! 生命周期?很多人会问生命周期是什么?Django也有生命周期吗?他就是一个框架呀. 我们先来说一说一个西瓜的生命周期,一个西瓜刚开始只是一个种子,种到 ...

  5. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    阅读目录 一.Django请求生命周期: 二.WEB开发模式: 三.cbv源码分析: 四.认识RESTful 补充知识:跨域 五.基于原生django开发restful的接口 六.drf安装.使用.A ...

  6. Django入门(二) 理解Django生命流程周期

    接上篇:Django入门-项目创建与初识子应用 项目的数据库模型 这里我们先使用sqlite类型的数据库,后面在进行改变 创建数据库模型 名词: ORM(Object Ralational Mappi ...

  7. django请求生命周期,FBV和CBV,ORM拾遗,Git

    一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post ...

  8. python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)

    一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post ...

  9. django models索引_Django(生命周期、每部分详解、路由层)

    https://www.zhihu.com/video/1248736141978927104 每日测验 """ 今日考题 1.什么是静态文件,django静态文件配置如 ...

最新文章

  1. Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法
  2. 迈向未来的那五种人,自古以来就很重要的人
  3. 转:Tomcat启动失败 提示Server Tomcat v7.0 Server at localhost failed to start.六种解决方法
  4. 推荐系统--矩阵分解(3)
  5. 现实版“奇异博士”?原来是这款神秘的“数学黑盒”
  6. 金融数学与计算机专业,金融数学专业就业方向及前景分析(解读)
  7. JQuery官方学习资料(译):类型
  8. 如何使用print()打印类的实例?
  9. 知道半径 两点角度 怎么求坐标
  10. mysql时间加8小时_劳斯莱斯库里南,超精致1:8模型车,组装时间长达450个小时...
  11. Bean 工厂和Application contexts有什么区别?
  12. 向已知EXCEL模板写入数据并导出
  13. AI算法工程师 | 04人工智能基础-高等数学知识强化(二)一元函数微分学
  14. Vue引入并使用Element-UI组件库的两种方式
  15. 2021CSDN粉丝年度严选文章TOP10榜单出炉~浅看超人气盘点
  16. 解决在iOS9上安装的软件显示未受信任的企业级开发者
  17. 科大讯飞离线语音命令词识别的使用说明
  18. 链接脚本.lds(详细)总结附实例快速掌握
  19. 【Hadoop】HBase 数据模型(Data Model)
  20. 12星座的出生年月日性格_十二个星座的出生年月日

热门文章

  1. Microsoft Azure云服务停机!系水泵未知原因关闭导致
  2. 赛迪数据:2018年数据中心市场数据
  3. 数据中心机房消防演练方案
  4. 柴油发电机组的基本结构及工作特性
  5. ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)
  6. Py之cairocffi:cairocffi的简介、安装、使用方法之详细攻略
  7. DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测
  8. 成功解决AttributeError: 'Word2Vec' object has no attribute 'index2word'
  9. Computer:MediaPreview的简介、安装、使用方法之详细攻略
  10. TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略