一、中间件的概念

中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
Django的中间件的定义:

自定义中间件有四个方法:

  1. process_request
  2. process_view
  3. process_exception
  4. process_response

最重要的是第一个和最后一个:

  1. 上述截图中的中间件都是django中的,我们也可以自己定义一个中间件,我们可以自己写一个类,但是必须继承MiddlewareMixin
    需要导入
  1. from django.utils.deprecation import MiddlewareMixin

  1.  把自定义中间件的路劲放在settings中间:
  1. class Md1(MiddlewareMixin):
  2.  
  3. def process_request(self,request):
  4. print("Md1请求")
  5. #return HttpResponse("Md1中断")
  6. def process_response(self,request,response):
  7. print("Md1返回")
  8. return response
  9.  
  10. def process_view(self, request, callback, callback_args, callback_kwargs):
  11.  
  12. # return HttpResponse("hello")
  13.  
  14. # response=callback(request,*callback_args,**callback_kwargs)
  15. # return response
  16. print("md1 process_view...")
  17.  
  18. def process_exception(self):
  19. print("md1 process_exception...")
  20.  
  21. class Md2(MiddlewareMixin):
  22.  
  23. def process_request(self,request):
  24. print("Md2请求")
  25. # return HttpResponse("Md2中断")
  26. def process_response(self,request,response):
  27. print("Md2返回")
  28. return response
  29. def process_view(self, request, callback, callback_args, callback_kwargs):
  30. print("md2 process_view...")
  31.  
  32. def process_exception(self):
  33. print("md1 process_exception...")

当其中一个中间件在request时候返回的话,就会直接返回不走下面中间件。可以用在限制爬虫上

  1. 一般情况下不会走最后一个exception,只有当执行报错的时候才回去执行,如果在此过程中加了response那么,直接执行
  1. process_response,不会继续执行exception

  1. 不报错就会直接返回process_ersponse
  1. 具体应用:
    校验哪些需要登录,设置白名单!

Django具体操作(五)的更多相关文章

  1. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  2. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

  3. Django models 操作高级补充

    Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra

  4. 从命令行运行django数据库操作

    从命令行运行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_T ...

  5. Django数据库操作(增删改查)

    Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...

  6. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  7. django中操作cookie与session

    cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...

  8. ubuntu16.04下Hyperledger之搭建Fabric环境简单操作(五步启动e2e_cli)

    如果你已经安装好go等工具.git及checkout相关代及下载相关镜像,您只需下面5步就能up e2e_cli~/go/src/github.com/hyperledger/fabric$ sudo ...

  9. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(五):测试项目

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  10. Windows server iis部署Django详细操作

    教程基于Windows server2012+Python3.6+IIS之上部署django的,同样适用于server2012之上的版本服务器和windows7以上的windows操作系统. 文章来自 ...

随机推荐

  1. ABAP-container拆分

    1.界面 2.代码 *&---------------------------------------------------------------------* *& Report ...

  2. css给文字加下划线

    语法:linear-gradient(direction, color-stop 1, color-stop 2,……) 简单用法:background-image: linear-gradient( ...

  3. JAVAWEB 一一 Sturts2+ibatis(框架,Sturts2,用action代替servlet)

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  4. Structs复习 通配符

    1.jar包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  5. hibernate中的sql 1+n 问题

    ( 产生的原因:当一对多或多对多的映射关系下,当在一方添加或修改数据时,一方集合属性中的多方都要发生变化;先select语句,再update语句.当一方集合属性中的数据有很多时,对应的update语句 ...

  6. EF 安装框架

    在NuGet中安装ef框架 命令:Install-package EntityFramework

  7. 吴裕雄 python神经网络 水果图片识别(3)

    import osimport kerasimport timeimport numpy as npimport tensorflow as tffrom random import shufflef ...

  8. hdu3826-Squarefree number-(欧拉筛+唯一分解定理)

    Squarefree number Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. 论Ubuntu下的docker多难搭建

    慷慨一下: 上周四开始打算在Ubuntu系统下面熟悉操作一下docker,所以深知在本地的虚拟机上搭建一个docker非常的easy. 但是,要下载一个镜像,真是太难了.基本可以说是下载不了的.于是乎 ...

  10. json转换工具类:json<===>list或者对象

    public class JsonTools { /** * POJO 转 JSON */ public static String createJsonString(Object object) { ...