首页 > 其他分享 >Django 中间件以及自定义中间件

Django 中间件以及自定义中间件

时间:2024-03-25 10:12:11浏览次数:22  
标签:自定义 process 中间件 middleware request Django django response

Django中间件

Django中间件是Django的门户

  • 请求来的时候需要先经过中间件才能达到真正的Django后端
  • 响应走的时候最后也要经过中间件才能发送出去
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中间件

取其中三个查看源码。

from django.contrib.sessions.middleware import SessionMiddleware
from django.contrib.auth.middleware import AuthenticationMiddleware
from django.contrib.messages.middleware import MessageMiddleware

# process_request
# process_response
两者基本所有中间件都具有

Django支持程序员自定义中间件并且暴露给程序员五个可以自定义的方法

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

自定义中间件

如何自定义中间件?

1. 在项目名或者应用下创建一个任意名称的文件夹
2. 在该文件夹内创建一个任意名称的py文件
3. 在该py文件中需要书写类,这个类必须继承(MiddlewareMixin)
4. 需要将类的路径以字符串的形式注册到settings配置文件中(MIDDLEWARE)
from django.utils.deprecation import MiddlewareMixin


class Mymiddleware1(MiddlewareMixin):
    def process_request(self, request):
        print('我是第一个process_request方法')

    def process_response(self, request,response):
        print('我是第一个process_response方法')
        return response


class Mymiddleware2(MiddlewareMixin):
    def process_request(self, request):
        print('我是第二个process_request方法')

    def process_response(self, request,response):
        print('我是第二个process_response方法')
        return response



process_request: 请求来的时候

# process_request
 1.请求来的时候需要经过每一个中间件里面的process_request方法,结果的顺序是按照匹配文件中注册的中间件从上往下的顺序一次执行。
 2.如果中间件里面没有定义该方法,那么请求将不再继续往后执行
 3.如果该方法返回了HttpResponse对象,那么请求将不再继续往后执行而是直接原路返回(可用作检验用户是否为黑名单,校验失败不允许访问等需要验证的地方)
 'process_request方法就是用来做全局相关的所有限制功能'

process_response: 响应请求走的时候

1.响应走的时候需要经过每一个中间件里面的process_response方法,该方法有两个额外的参数request,response。
2.该方法必须返回一个HttpResponse对象
	2.1默认返回的就是形参request
    2.2也可以返回自己的
3.顺序是按照配置文件中注册从下往上的一次经过,如果没有定义,直接跳过执行下一个

如果在第一个process_request方法返回HttpResponse,会怎样?


会直接走同级别的process_request返回。

process_view,process_template_response,process_exception

标签:自定义,process,中间件,middleware,request,Django,django,response
From: https://www.cnblogs.com/HeroZhang/p/18093789

相关文章

  • djangoCIA报价平台的设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,互联网已经深入到我们日常生活的方方面面。在众多的应用场景中,报价系统作为商业交易的重要环节,扮演着至关重要的角色。尤其是在CIA(Ce......
  • djangoAndroid共享停车位(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着城市化进程的加速,汽车已成为人们日常生活中不可或缺的交通工具。然而,在许多城市中,由于停车位数量有限,停车难成为了一大问题。为了解决这一问题,共享停车......
  • Django cookie与session,CBV如何添加装饰器
    cookie与session简介会话跟踪技术什么是会话跟踪?我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某......
  • 【附源码】django计算机毕业设计web的诗词信息管理平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化时代,诗词作为中华民族传统文化的瑰宝,承载着丰富的历史和文化价值。然而,随着科技的发展和生活节奏的加快,人们对于诗词的接触和传承逐渐减少,尤其......
  • 【附源码】django计算机毕业设计web技术的养老服务平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义养老服务平台开发设计背景:随着社会老龄化的加剧,养老问题逐渐成为社会关注的热点。老年人作为社会的重要组成部分,他们的生活质量和幸福感直接关系到社会的和谐与稳定......
  • 爬虫工作量由小到大的思维转变---<第五十四章 Scrapy 降维挖掘---中间件系列(3)>
    前言:继续上一章:https://hsnd-91.blog.csdn.net/article/details/136977606本章主要介绍:UrlLengthMiddleware和DepthMiddleware是Scrapy框架中的关键Spider中间件,自此,爬虫中间件部分,一共5个算是全部介绍完毕!UrlLengthMiddleware的功能主要是设置和限制请求的URL长度......
  • 爬虫工作量由小到大的思维转变---<第五十五章 Scrapy 降维挖掘---中间件系列(4)>
    前言:爬虫中间件的文章:https://hsnd-91.blog.csdn.net/article/details/136977606https://hsnd-91.blog.csdn.net/article/details/136978069讲完了爬虫中间件(5个),现在就应该归类到下载中间件(11个)!下载器中间件的作用和重要性        下载器中间件是Scrapy......
  • Django Forms组件,展示用户输入不合规的提示信息,钩子函数
    DjangoForms组件,展示用户输入不合规的提示信息,钩子函数前戏:使用form表单,用户输入特定信息,比如:金瓶,输入框右侧提示信息,不使用Ajax。前端代码:<body><formaction=""method="post"><p>username:<inputtype="text"name="username"><......
  • django脚本orm中使用原生sql
    fromdjango.core.management.baseimportBaseCommandfromchat_greeting_messages.modelsimportGreetingimportosfromdjango.dbimportconnectionclassCommand(BaseCommand):help="Patchinitializationrecruiternotsuitablegretting"......
  • IDEA自定义注解配置
    一、类注释一、类注释1、打开设置打开设置:Settings->Editor->FileandCodeTemplates,如下图。FileHeader.java为引用的模板文件类头文件注释模板(FileHeader.java)/***@title${NAME}*@date${DATE}${TIME}*@authorbxc*@descriptionTODO*/二、......