栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django中间件的原理流程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django中间件的原理流程

什么是中间件

官方的说法 中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统 用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。

但是由于其影响的是全局 所以需要谨慎使用 使用不当会影响性能。

说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作 它本质上就是一个自定义类 类中定义了几个方法 Django框架会在请求的特定的时间去执行这些方法。

我们一直都在使用中间件 只是没有注意到而已 打开Django项目的Settings.py文件 看到下图的MIDDLEWARE配置项。

MIDDLEWARE [
 django.middleware.security.SecurityMiddleware ,
 django.contrib.sessions.middleware.SessionMiddleware ,
 django.middleware.common.CommonMiddleware ,
 django.middleware.csrf.CsrfViewMiddleware ,
 django.contrib.auth.middleware.AuthenticationMiddleware ,
 django.contrib.messages.middleware.MessageMiddleware ,
 django.middleware.clickjacking.XframeOptionsMiddleware ,
]

中间件流程 一切请求都会先经过中间件才会到达Django后端 所以中间件可以用来做全局方面的一些功能
详细:给我们定义了五个方法

process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)

以上方法的返回值可以是None或一个HttpResponse对象 如果是None 则继续按照django定义的规则向后继续执行 如果是HttpResponse对象 则直接将该对象返回给用户。

二、中间件执行流程 2.1、执行流程图

2.2、执行过程 process_request:在执行视图函数之前执行 如果返回的是None 将一直按照MiddleWare配置的顺序向下执行 如果返回的是HttpResponse则终止向下执行 在HttpResponse的中间件这里向上倒序执行 将相应的对象返回给浏览器。

如图所示

process_view:执行完process_request方法都执行完之后 匹配路由 在执行视图函数之前 先执行process_view,执行完之后再执行视图函数。如果中间返回HttpResponse则倒序返回给浏览器。

process_exception:视图函数出现异常后执行。

process_template_response:视图函数执行完之后调用对应模板返回 但视图函数返回的对象要有一个render()方法。

process_response: 在视图函数执行完之后执行 按照MiddleWare配置顺序的倒序执行。

2.3、Django请求流程图

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号