Django具体操作(五)
一、中间件的概念
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
Django的中间件的定义:
自定义中间件有四个方法:
process_request
process_view
process_exception
process_response
最重要的是第一个和最后一个:
上述截图中的中间件都是django中的,我们也可以自己定义一个中间件,我们可以自己写一个类,但是必须继承MiddlewareMixin
需要导入
- from django.utils.deprecation import MiddlewareMixin
把自定义中间件的路劲放在settings中间:
- class Md1(MiddlewareMixin):
- def process_request(self,request):
- print("Md1请求")
- #return HttpResponse("Md1中断")
- def process_response(self,request,response):
- print("Md1返回")
- return response
- def process_view(self, request, callback, callback_args, callback_kwargs):
- # return HttpResponse("hello")
- # response=callback(request,*callback_args,**callback_kwargs)
- # return response
- print("md1 process_view...")
- def process_exception(self):
- print("md1 process_exception...")
- class Md2(MiddlewareMixin):
- def process_request(self,request):
- print("Md2请求")
- # return HttpResponse("Md2中断")
- def process_response(self,request,response):
- print("Md2返回")
- return response
- def process_view(self, request, callback, callback_args, callback_kwargs):
- print("md2 process_view...")
- def process_exception(self):
- print("md1 process_exception...")
当其中一个中间件在request时候返回的话,就会直接返回不走下面中间件。可以用在限制爬虫上
一般情况下不会走最后一个exception,只有当执行报错的时候才回去执行,如果在此过程中加了response那么,直接执行
- process_response,不会继续执行exception
不报错就会直接返回process_ersponse
具体应用:
校验哪些需要登录,设置白名单!
Django具体操作(五)的更多相关文章
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- Django models 操作高级补充
Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra
- 从命令行运行django数据库操作
从命令行运行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_T ...
- Django数据库操作(增删改查)
Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
- django中操作cookie与session
cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...
- ubuntu16.04下Hyperledger之搭建Fabric环境简单操作(五步启动e2e_cli)
如果你已经安装好go等工具.git及checkout相关代及下载相关镜像,您只需下面5步就能up e2e_cli~/go/src/github.com/hyperledger/fabric$ sudo ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(五):测试项目
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- Windows server iis部署Django详细操作
教程基于Windows server2012+Python3.6+IIS之上部署django的,同样适用于server2012之上的版本服务器和windows7以上的windows操作系统. 文章来自 ...
随机推荐
- ABAP-container拆分
1.界面 2.代码 *&---------------------------------------------------------------------* *& Report ...
- css给文字加下划线
语法:linear-gradient(direction, color-stop 1, color-stop 2,……) 简单用法:background-image: linear-gradient( ...
- JAVAWEB 一一 Sturts2+ibatis(框架,Sturts2,用action代替servlet)
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...
- Structs复习 通配符
1.jar包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...
- hibernate中的sql 1+n 问题
( 产生的原因:当一对多或多对多的映射关系下,当在一方添加或修改数据时,一方集合属性中的多方都要发生变化;先select语句,再update语句.当一方集合属性中的数据有很多时,对应的update语句 ...
- EF 安装框架
在NuGet中安装ef框架 命令:Install-package EntityFramework
- 吴裕雄 python神经网络 水果图片识别(3)
import osimport kerasimport timeimport numpy as npimport tensorflow as tffrom random import shufflef ...
- hdu3826-Squarefree number-(欧拉筛+唯一分解定理)
Squarefree number Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 论Ubuntu下的docker多难搭建
慷慨一下: 上周四开始打算在Ubuntu系统下面熟悉操作一下docker,所以深知在本地的虚拟机上搭建一个docker非常的easy. 但是,要下载一个镜像,真是太难了.基本可以说是下载不了的.于是乎 ...
- json转换工具类:json<===>list或者对象
public class JsonTools { /** * POJO 转 JSON */ public static String createJsonString(Object object) { ...