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. mysql ID起始值重置方法

    方法一,执行SQL:truncate table `table_name`; 这种方法好处是运行速度超快 方法二,执行如下SQL: (还是假定表名是test)delete from `table_na ...

  2. Android 隐藏和显示软键盘

    1 public static void hideKeyboard(View view){ 2 InputMethodManager imm = (InputMethodManager) view.g ...

  3. canvas合并图片并长按保存

    代码实现 <div class="pho-bg"> <img src="../../assets/images/FeedbackActivity/pos ...

  4. unity Dotween Path 设置路径平滑加旋转平滑

    Waiter.transform.DOPath(list.ToArray(), 3f * (index / 2.0f + 1.0f), PathType.CatmullRom).SetLookAt(0 ...

  5. django学习:转载

    https://www.cnblogs.com/ginvip/p/6894690.html https://www.cnblogs.com/yangmv/p/5327477.html https:// ...

  6. Ubuntu20.04 TLS 开机卡在“A start job is running for wait for network to be Configured”解决

    问题: 安装ubuntu20.04 TLS系统后,开机卡在"A start job is running for wait for network to be Configured" ...

  7. cell批量改名字

    本帖最后由 wanchengchen 于 2021-7-19 10:41 编辑下面是在论坛上学习到的脚本,发上来大家一起学习,使用的是virtuoso6.1.7:layout改名字:procedure ...

  8. Topsis法的python实现

    TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首 ...

  9. Maven将项目包deploy到nexus私服

    maven配置 打开maven安装目录下面的settings.xml,在servers中添加配置.如下: pom配置 在pom文件中加入distributionManagement配置,注意:这里的i ...

  10. python音乐分类--knn

    1 #利用knn算法分类音乐,将音乐进行情绪分类 2 #将音乐分为兴奋的(excited), 愤怒的(angry),悲伤的(sorrowful),轻松的(relaxed) 3 4 #可分离因素 5 # ...