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. 【剑指Offer】【链表】链表中环的入口结点

    题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. A:创建两个指针,一个pFast一个pSlow指向链头,pFast一次走2步,pSlow一次走1步,如果两个指针必相遇 ...

  2. UE4.27 新版本像素流送插件配置

    UE4.27 像素流送新版插件部署命令 以下内容参考自UE5官方文档:https://docs.unrealengine.com/5.0/en-US/unreal-engine-pixel-strea ...

  3. vue v-model的原理

    关于v-model v-model 可以实现表单与data里的双向绑定 很多插件上可以在组件上使用v-model,他是如何实现的呢,其实v-model就是一个语法糖 <input v-model ...

  4. Pytest Fixture(三)

    name: name参数表示可以对fixture的名称进行重命名: 注意:通过name重命名后,继续使用以前的名字调用会报错. import pytest @pytest.fixture(name=' ...

  5. 通过Jsoup,爬取车辆品牌,车系,LOGO等

    @Test public void test4() throws IOException { for (int i = 65; i <= 90; i++) { String value = St ...

  6. 前端常用函数(find、includes、filter、Set、forEach、map、some、every、findIndex、splice、reduce)

    https://blog.csdn.net/qq_24280125/article/details/119275109 array.join(separator) .拼接返回字符串 参数 separa ...

  7. 爱心代码_HTML

    直接上效果 <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...

  8. swagger接口测试

    导入依赖:<!-- swagger start --><dependency> <groupId>io.springfox</groupId> < ...

  9. 连接打印机Lodop

    <div class="panel-body"> <div class="row show-grid"> <div class=& ...

  10. Linux中/etc目录下passwd和shadow文件

    /etc/passwd介绍 首先,通过cat /etc/passwd 来查看文件/etc/passwd中内容: root:x:0:0:root:/root:/bin/bash daemon:x:1:1 ...