Django中间件的介绍及使用
1、中间件的理解:
是用来处理Django请求与响应的框架级别的钩子,处于wsgi模块与视图函数之间,在执行视图函数之前和之后所做
的动作,是一个轻量级、低级别的插件,作用于全局,使用不当很可能影响性能。
2、导入中间件模块
在app01下创建my_middlewares.py文件
# from django.middleware.csrf import CsrfViewMiddleware 按住Ctrl键然后鼠标单击CsrfViewMiddleware
1 from django.utils.deprecation import MiddlewareMixin
3、注册中间件
打开settings.py
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',
'app01.my_middlewares.MD1'
'app01.my_middlewares.MD2' # 注册中间件
]
4、中间件就是一个类,处理django的请求和响应的五个方法:
参数 执行时间 执行顺序 返回值
(1)process_request(self,request):
参数:
request跟视图函数中的request一样
执行时间:
视图函数执行之前,也在路由匹配之前。
执行顺序:
按照中间件的注册顺序 顺序执行
返回值:
None: 正常流程
HttpResponse: 如果MD1(第一个注册的中间件)有返回值,那么之后的中间件、路由匹配、视图函数都不执行了,
直接执行当前中间件中的process_response方法,剩下正常流程将执行结果返回给浏览器。
(2)process_response(self,request,response):
参数:
response response对象
request跟视图函数中的request一样
视图函数在执行后,需要return response,所以中间件也需要返回response
执行时间:
视图函数执行之后
执行顺序:
按照中间件的注册顺序 倒序执行
返回值:
HttpResponse: 必须返回response对象
(3)process_view(self,request,view_func,view_args,view_kwargs):
参数:
request跟视图函数中的request一样
view_func 视图函数
view_args 传递给视图函数的位置参数
view_kwargs 传递给视图函数的关键字参数
形参的名字可以任意取
执行时间:
视图函数执行之前,路由匹配之后。
执行顺序:
按照中间件的注册顺序 顺序执行
返回值:
None: 正常流程
HttpResponse: 当前中间件之后的中间件process_view、视图函数都不执行,
直接执行最后一个中间件中的process_response方法,剩下正常流程将结果返回给浏览器。
(4)process_expection(self,request,expection):
参数:
request跟视图函数中的request一样
expection 错误对象
执行时间(触发条件):
视图函数执行出错之后才执行
执行顺序:
按照中间件的注册顺序 倒序执行
返回值:
None: 交给下一个中间件处理异常,都不处理交给Django处理。
HttpResponse: 当前中间件之后的中间件process_expection都不执行,
直接执行最后一个中间件中的process_response方法,剩下正常流程将结果返回给浏览器。
(5)process_template_response(self,request,response):
参数:
request跟视图函数中的request一样
response template_response对象
response.template_name = 'index1.html' #可以动态换模板
response.context_data['name'] = 'jack' #可以动态换模板内容
执行时间(触发条件):
视图函数返回的是template_response对象
打开views.py 导入TemplateResponse
from django.template.response import TemplateResponse
执行顺序:
按照中间件的注册顺序 倒序执行
返回值:
HttpResponse: 必须返回template_response对象

Django中间件的介绍及使用的更多相关文章
- django中间件介绍
在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...
- Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块
目录 使用Django对中间件的调用思想完成自己的功能 功能要求 importlib模块介绍 功能的实现 csrf中间件详细介绍 跨站请求伪造 Django csrf中间件 form表单 ajax c ...
- Django - Django框架 简单介绍
Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...
- Django项目结构介绍
官网下载网址:https://www.djangoproject.com/download/ 安装(安装最新LTS版): pip3 install django==2.0.7 创建一个django项目 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件的5种自定义方法
阅读目录(Content) Django中间件 自定义中间件 中间件(类)中5种方法 中间件应用场景 回到顶部(go to top) Django中间件 在http请求 到达视图函数之前 和视图函 ...
- Django中间件如何处理请求
Django中间件 在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. Django1.9版本以后中间件的执行流程 1. ...
- 基于django中间件的编程思想
目录 前言 前期准备 importlib模块介绍 基于django中间件的编程思想 django中settings源码 配置文件的插拔式设计 基于django中间件的思想,实现功能配置 前言 在学习d ...
- Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想
django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...
- 12月22日内容总结——django中间件的三个了解要求的方法、基于django中间件的功能设计、cookie与session
目录 一.django中间件三个了解的方法 二.django中间件五个方法的执行流程详解 三.基于django中间件的功能设计 功能设计介绍 如何利用字符串导入模块 功能模拟 四.cookie与ses ...
随机推荐
- node.js 新手快速入门
我当初学的时候,是在大大们的指导下开始学习的,用了3天搞定大大们给的任务.下面我就把这个经历分享出来,让大家借鉴一下.欢迎吐槽~~ 任务如下: 根据Node js 开发入门教程第五章的一个使用node ...
- 【Numpy】安装Anaconda3和调试
1,在Anaconda官网下载一个对应操作系统的安装包:https://www.anaconda.com/distribution/ 2,然后选版本操作系统和版本号,下载完成后安装 3,windows ...
- SQL Server创建表,存储过程,function函数脚本规范
--创建新表 /**************************************************************************************** *** ...
- python_列表(list)
列表用中括号表示,列表中的数据可以存储不同类型的数据,在实际开发中,列表中都是定义相同类型数据,可以对列表中的数据用相同的方法进行处理. 1, 通过index获取到对应的值. num_list = [ ...
- Map 使用
1.替换map中的某个key Map<String,Object> map = new HashMap<>(); map.put("新key",map.re ...
- 全局 使用 stylus 变量
首先 安装 啦 npm i stylus stylus-loader -D 之后 使用全局变量 然后在组件中引用改变量 -->没有用! 原因还没有在build/utils.js文件 全局引入 ...
- Qt实现collapsePanel(折叠)功能
实践过程中,看到C#实现的CollapsePanel功能,比一般的TabWidget更加直观,充分利用了页面空间,遂感到很有兴趣,也查阅了很多资料搜索Qt在这方面的实现. 目前来说,比较常见的作法就是 ...
- Linux基础命令、按照软件、数据库基础操作
一.Linux基础命令 1.防火墙 systemctl - 控制 systemd 系统与服务管理器 systemctl 可用于 检查和控制 systemd(1) 系统与服务管理器的 状态 常用的命令: ...
- ES7-ES12总结篇
脑图模式 插入 ES7-ES12 ES7 Array.prototype.includes() includes() 方法用来判断一个数组是否包含一个指定的值,如果包含则 ...
- Python 去掉文本内容中的\xa0字符
爬取网页时,不可避免会遇到\xa0字符串,就会发现,正则re.sub(r'\xa0', '')和字符串的replace都不管用. 通常地,我们所用的空格的ASCII码是 \x20 ,是在标准ASCII ...