Django中间件及自定义中间件

[TOC]

Django中间件

**中间件介绍:**中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件都负责做一些特定的功能。

说的直白点中间件就是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。

Django中有7个默认的中间件:

1# settings.py 2 3MIDDLEWARE = [ 4 'django.middleware.security.SecurityMiddleware', 5 'django.contrib.sessions.middleware.SessionMiddleware', 6 'django.middleware.common.CommonMiddleware', 7 'django.middleware.csrf.CsrfViewMiddleware', 8 'django.contrib.auth.middleware.AuthenticationMiddleware', 9 'django.contrib.messages.middleware.MessageMiddleware', 10 'django.middleware.clickjacking.XFrameOptionsMiddleware', 11]

<span style='color:red'>在Django的生命周期中,浏览器输入网址经过web服务网关接口(wsgiref)然后还要经过Django中间件才会到Django的路由层(请求来的时候,Django中间件是自上而下顺序执行,一旦某个中间件拦截了请求,后面的将不再执行。响应走的时候,Django中间件是自下而上逆序执行。)</span>

自定义中间件:

在项目目录下创建一个middleware包,然后在包中新建一个my_middleware.py文件如下:

1# my_middleware.py 2from django.utils.deprecation import MiddlewareMixin 3 4# 自定义类并继承MiddlewareMixin 5class Mi(middlewareMixin): 6 def process_request(self, request): 7 print('我来自Mi哈哈哈')

然后去settings.py中注册自定义的中间件

1# settings.py 2 3MIDDLEWARE = [ 4 'django.middleware.security.SecurityMiddleware', 5 'django.contrib.sessions.middleware.SessionMiddleware', 6 'django.middleware.common.CommonMiddleware', 7 'django.middleware.csrf.CsrfViewMiddleware', 8 'django.contrib.auth.middleware.AuthenticationMiddleware', 9 'django.contrib.messages.middleware.MessageMiddleware', 10 'django.middleware.clickjacking.XFrameOptionsMiddleware', 11 12 # 自定义的中间件 13 'middleware.my_middleware.Mi', 14]

五个可修改的内置方法:

1# 两个重点 2 3# process_request() 4""" 5请求来的时候会从上往下依次经过每一个中间里面process_request, 6一旦里面返回了HttpResponse对象那么就不再往后执行了, 7会执行同一级别的process_response 8""" 9def process_request(self, request): 10 print('我是process_request') 11 12# process_response() 13""" 14响应走的时候,会从下往上一次经过每一个中间件里面的porcess_response 15""" 16def process_response(self, request, response): 17 # response就是要返回给用户的数据 18 print('我是process_response') 19 return response 20 21 22# 三个了解 23# procesee_view(): 路由匹配成功之后执行视图函数之前触发 24# process_exception: 当视图函数出现异常的时候自动触发 25# process_template_response: 当视图函数执行完毕之后并且返回的对象中含有render方法的情况下才会触发
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

项目部署教程在线演示(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2F139.199.131.146%2F)1.1.原理介绍django 一个基于python的开源web框架uwsgi 一是一个web服务器,也可以当做中间件

Django:中间件与csrf

一、中间件  什么是中间件  中间件有什么用  自定义中间件  中间件应用场景二、csrf  csrftoken跨站请求伪造一、中间件  什么是中间件中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨