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中间件的介绍及使用的更多相关文章

  1. django中间件介绍

    在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...

  2. Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块

    目录 使用Django对中间件的调用思想完成自己的功能 功能要求 importlib模块介绍 功能的实现 csrf中间件详细介绍 跨站请求伪造 Django csrf中间件 form表单 ajax c ...

  3. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  4. Django项目结构介绍

    官网下载网址:https://www.djangoproject.com/download/ 安装(安装最新LTS版): pip3 install django==2.0.7 创建一个django项目 ...

  5. Django 2.0 学习(20):Django 中间件详解

    Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...

  6. Django中间件的5种自定义方法

    阅读目录(Content) Django中间件 自定义中间件 中间件(类)中5种方法 中间件应用场景 回到顶部(go to top) Django中间件 在http请求 到达视图函数之前   和视图函 ...

  7. Django中间件如何处理请求

    Django中间件 在http请求 到达视图函数之前   和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. Django1.9版本以后中间件的执行流程 1. ...

  8. 基于django中间件的编程思想

    目录 前言 前期准备 importlib模块介绍 基于django中间件的编程思想 django中settings源码 配置文件的插拔式设计 基于django中间件的思想,实现功能配置 前言 在学习d ...

  9. Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想

    django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...

  10. 12月22日内容总结——django中间件的三个了解要求的方法、基于django中间件的功能设计、cookie与session

    目录 一.django中间件三个了解的方法 二.django中间件五个方法的执行流程详解 三.基于django中间件的功能设计 功能设计介绍 如何利用字符串导入模块 功能模拟 四.cookie与ses ...

随机推荐

  1. Queries Gym - 100741A - 树状数组

    给定 \(n\) 和 \(m\),对于 \(n\) 个数字 \(a_i\),进行下列三种操作: (1) + p r: 将 p 位置的元素加上 r, 输出此时 p 位置的值: (2) - p r : 将 ...

  2. 树莓派4B使用花生壳phtunnel内网穿透访问本地Gogs

    已经搭建好Gogs(https://www.cnblogs.com/congyinew/p/16115074.html),接下来就是想外网上传代码到Gogs 一.申请账号 https://open.o ...

  3. el-table 如果文字过多展示...

    1 <el-table-column label="任务名称" width="120px" align="center" :show- ...

  4. Java-AES256加密Util

    1 public class AES256Util { 2 3 /** 4 * 密钥, 256位32个字节 5 */ 6 public static final String DEFAULT_SECR ...

  5. 20192305 王梓全Python程序设计实验二报告

    20192305 王梓全Python程序设计实验二报告 课程:<Python程序设计> 班级: 1923 姓名: 王梓全 学号:20192305 实验教师:王志强 实验日期:2021年4月 ...

  6. xshell和xftp绿色版下载

    下载地址:https://www.xshell.com/zh/free-for-home-school/ 点击后页面如下,输入自己的姓名和邮箱然后点击下载即可.登录自己的邮箱获取下载链接.

  7. maven父子项目,由于pom文件中的<packaging>pom</packaging>导致报数据源配置错误

    啊啊啊~~~ 又是踩坑的一天!!! 我在子模块中进行开发,然后子模块的pom文件中也写了<packaging>pom</packaging>导致报数据源配置错误.具体内容如下图 ...

  8. ansible使用笔记:长期更新

    ansible使用笔记 ##将/home/system.sh文件拷贝到所有服务器的/home/system.sh ansible all -m copy -a "src=/home/syst ...

  9. MLP-Mixer: An all-MLP Architecture for Vision 纯MLP架构

    典型的MLP结构包括三层:input.hidden.output.不同层之间都是全联接的. MLP-Mixer完全利用基础的矩阵乘法运算和数据变换以及非线性层来完成复杂数据集的分类任务. Step 1 ...

  10. Java jsp视频标签

    视频标签: 直接显示 <embed src="视频地址.mp4" width="60" height="40"> 按钮点击 &l ...