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. ZIP文件操作工具类

    2 3 import lombok.extern.slf4j.Slf4j; 4 import org.apache.commons.io.FilenameUtils; 5 6 import java. ...

  2. AD中添加原理图文档模板-转载

    (24条消息) AD中添加原理图文档模板_shuguang552的博客-CSDN博客_ad原理图模板

  3. 在ubuntu18.04上安装nodejs14

    步骤 1:更新 在 Ubuntu 上运行 apt update 命令以更新软件包库内容数据库. sudo apt update 第 2 步:在 Ubuntu 18.04 上安装 Node.js 14 ...

  4. 解决动态class展示问题

    由于部分涉及到隐私,就打马赛克了 比如这个小问题,我有这个动态的class,里面是十几个类似btn的按钮,然后每个btn下面又有子多选框,一开始是我点击那个下面的子级他的父级就被选中,默认选中第一个父 ...

  5. [478] C2 Age Of Splendor Opcodz

    [478] C2 Age Of Splendor Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEn ...

  6. win10下载jdk并配置环境变量

    win10下载jdk并配置环境变量 1. jdk下载 下载官网:Java SE开发套件15.0.2 2. jdk安装 一直点下一步就可以 3. 环境变量 配置 右键我的电脑--属性--高级系统设置-- ...

  7. ssh免密码登录服务器

    A机为本地主机(即用于控制其他主机的机器) B机为远程主机(即被控制的机器server)B机:192.168.3.145 假如A机无密码登录B机器     A机上的命令: 1,ssh-keygen - ...

  8. 创建一个HashMap实例,该实例具有足够高的“初始容量”

    创建一个HashMap实例,该实例具有足够高的"初始容量" /** * 创建一个{@link HashMap}实例,该实例具有足够高的"初始容量" * * @p ...

  9. UVA10404

    由题意可知,这题和巴什博弈没什么关系了 相似题目:AtCoder Beginner Contest 278 F - Shiritori 预备知识:DP,博弈论的必胜态和必败态 问题的关键是确定\(f_ ...

  10. mysql查询和更新不能同时出现

    mysql出现You can't specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值 ...