Django中间件及自定义中间件

Stella981
• 阅读 439

[TOC]

Django中间件

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

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

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

# 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',
]

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

自定义中间件:

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

# my_middleware.py
from django.utils.deprecation import MiddlewareMixin

# 自定义类并继承MiddlewareMixin
class Mi(middlewareMixin):
    def process_request(self, request):
        print('我来自Mi哈哈哈')

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

# 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',
    
    # 自定义的中间件
    'middleware.my_middleware.Mi',
]

五个可修改的内置方法:

# 两个重点

# process_request()
"""
请求来的时候会从上往下依次经过每一个中间里面process_request,
一旦里面返回了HttpResponse对象那么就不再往后执行了,
会执行同一级别的process_response
"""
def process_request(self, request):
    print('我是process_request')
    
# process_response()
"""
响应走的时候,会从下往上一次经过每一个中间件里面的porcess_response
"""
def process_response(self, request, response):
    # response就是要返回给用户的数据
    print('我是process_response')
    return response


# 三个了解
# procesee_view(): 路由匹配成功之后执行视图函数之前触发
# process_exception: 当视图函数出现异常的时候自动触发
# process_template_response: 当视图函数执行完毕之后并且返回的对象中含有render方法的情况下才会触发
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
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服务器,也可以当做中间件
Stella981 Stella981
2年前
Django【第12篇】:Django之中间件
自定义验证规则以及中间件简单介绍1、python2和python3中的区别!复制代码(https://oscimg.oschina.net/oscnet/47ed19d33ea2d94f58e1b2015c092ac5bfd.gif)对于python2内置的字符串类型有str和unicode
Stella981 Stella981
2年前
Django:中间件与csrf
一、中间件  什么是中间件  中间件有什么用  自定义中间件  中间件应用场景二、csrf  csrftoken跨站请求伪造一、中间件  什么是中间件中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨
Stella981 Stella981
2年前
Django中间件
一、Django中间件简介  官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。  但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。django中间件就类似于是dja
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Django—中间件
CBV加装饰器(session)要在CBV视图中使用我们上面的check\_login装饰器,有以下三种方式:fromdjango.utils.decoratorsimportmethod\_decoratorfromdjango.shortcutsimportrender,redirect,
Wesley13 Wesley13
2年前
Java中间件入门教程
\TOC\前言本博客介绍Java中间件的一些知识,仅仅是一些知识储备。中间件中间件概念中间件:中间件是一种介于操作系统和应用软件之间的一种软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。若是以新一代的中间件系列产品来组合应用,同时配合以可复
贾蓁 贾蓁
3个月前
深入Go底层原理,重写Redis中间件实战
深入Go底层原理,重写Redis中间件实战download》http://quangneng.com/1997/"重写Redis中间件"通常指的是对于Redis中间件的自定义实现或修改。在这个上下文中,"中间件"通常指的是在应用程序和Redis服务器之间的