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 ...
随机推荐
- 【剑指Offer】【链表】链表中环的入口结点
题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. A:创建两个指针,一个pFast一个pSlow指向链头,pFast一次走2步,pSlow一次走1步,如果两个指针必相遇 ...
- UE4.27 新版本像素流送插件配置
UE4.27 像素流送新版插件部署命令 以下内容参考自UE5官方文档:https://docs.unrealengine.com/5.0/en-US/unreal-engine-pixel-strea ...
- vue v-model的原理
关于v-model v-model 可以实现表单与data里的双向绑定 很多插件上可以在组件上使用v-model,他是如何实现的呢,其实v-model就是一个语法糖 <input v-model ...
- Pytest Fixture(三)
name: name参数表示可以对fixture的名称进行重命名: 注意:通过name重命名后,继续使用以前的名字调用会报错. import pytest @pytest.fixture(name=' ...
- 通过Jsoup,爬取车辆品牌,车系,LOGO等
@Test public void test4() throws IOException { for (int i = 65; i <= 90; i++) { String value = St ...
- 前端常用函数(find、includes、filter、Set、forEach、map、some、every、findIndex、splice、reduce)
https://blog.csdn.net/qq_24280125/article/details/119275109 array.join(separator) .拼接返回字符串 参数 separa ...
- 爱心代码_HTML
直接上效果 <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...
- swagger接口测试
导入依赖:<!-- swagger start --><dependency> <groupId>io.springfox</groupId> < ...
- 连接打印机Lodop
<div class="panel-body"> <div class="row show-grid"> <div class=& ...
- Linux中/etc目录下passwd和shadow文件
/etc/passwd介绍 首先,通过cat /etc/passwd 来查看文件/etc/passwd中内容: root:x:0:0:root:/root:/bin/bash daemon:x:1:1 ...