首页 > 其他分享 >django框架:django中间件

django框架:django中间件

时间:2023-01-04 21:45:11浏览次数:42  
标签:框架 process 中间件 request django response view

django中间件

官方说法:中间件是一个用来处理django的请求和响应的框架级别的钩子。说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,他本质上就是一个自定义类,类中定义了几个方法,django框架会在请求的特定的时间去执行这些方法。

django中间件类似于django的门户、所有的请求来和响应走都必须经过中间件。

django默认自带七个中间件每个中间件都有各自负责的功能、我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下面的MIDDLEWARE配置项。

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中间件的使用场景:只要是与全局相关的功能都可以在中间件中编写。

eg:全局用户身份校验、全局用户黑名单校验、全局用户访问频率校验。

自定义中间件

django支持自定义中间件可以有5个方法。

process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)

基本使用

  1. 创建一个任意名称的文件夹
  2. 在该文件夹内创建一个任意名称的py文件
  3. 在该py文件内编写中间件类
  4. 配置文件中注册
# 步骤二创建的py文件
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,redirect,render

class MyMdd1(MiddlewareMixin):
    def process_request(self, request):
        print('from MyMdd1 process_request')

    def process_response(self, request, response):
        print('from MyMdd1 process_response')
        return response  # response就是视图函数返回给客户端的数据

# settings.py
MIDDLEWARE = [
    # 注册自定义中间件
    'app01.mymiddleware.mymdd.MyMdd1',
    'app01.mymiddleware.mymdd.MyMdd2',
]

需要掌握的方法

1.process_request

def process_request(self, request):
    print('from MyMdd1 process_request')
    return HttpResponse('from MyMdd1 process_request')
1.请求来的时候会按照配置文件中注册了的中间件从上往下依次执行每一个中间件里面process_request方法、如果没有则直接跳过
2.如果该方法自己返回了HttpResponse对象,那么请求不再继续往后执行原路返回相应的数据

2.process_response

def process_response(self, request, response):
    print('from MyMdd1 process_response')
    return response  # response就是视图函数返回给客户端的数据
1.响应走的时候会按照配置文件中注册了的中间件从下往上依次执行每一个中间件里process_response方法、如果没有则直接跳过
2.该方法有两个形参request和response 并且默认情况下应该返回response
3.如果该方法自己返回了HttpResponse对象,那么响应会替换成该HttpResponse对象数据,而不再是视图函数想要返回给客户端的数据

注意:

如果请求的过程中process_request方法直接返回了HttpResponse对象那么会原地执行同级别process_response方法返回(flask则不同)。

需要了解的方法

1.process_view

def process_view(self,request,view_func, view_args, view_kwargs):
    # print(view_func)  # 即将要执行的视图函数名
    # print(,view_args)  # 传给视图函数的位置参数
    # print(view_kwargs)  # 传给视图函数的关键字参数
    print('from MyMdd2 process_view')
当路由匹配成功之后执行视图函数之前自动从上往下执行配置文件中注册了的中间件里面的process_view方法

2.process_exception

def process_exception(self,request,exception):
    print(exception)
    print('from MyMdd2 process_exception')
当视图函数执行过程中报错并在返回响应的时候自动从下往上执行配置文件中注册了的中间件里面的process_exception

3.processtemplate_response

def process_template_response(self,request,response):
    print('from MyMdd2 process_template_response')
    return response
当视图函数执行完毕之后返回的对象中含有render属性对应render函数,则会从下往上执行配置文件中注册了的中间件里面的process_template_response方法

标签:框架,process,中间件,request,django,response,view
From: https://www.cnblogs.com/wxlxl/p/17026093.html

相关文章

  • Django-restframework 序列化器与反序列化器
    序列化器restframework中提供了所有可用的序列化器基类,引用方法如下:fromrest_frameworkimportserializersSerializer:序列化器基类,drf中所有的序列化器都必须继承于S......
  • 5分钟快速掌握 Python 定时任务框架
    APScheduler简介在实际开发中我们经常会碰上一些重复性或周期性的任务,比如像每天定时爬取某个网站的数据、一定周期定时运行代码训练模型等,类似这类的任务通常需要我们手......
  • django时区问题的解决
    django时区问题的解决 更新时间:2021年05月18日09:37:58 作者:Silent丿丶黑羽  我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,我们希望存储在数据......
  • Django 03
    https://docs.djangoproject.com/en/4.1/intro/tutorial03/fromdjango.urlsimportpathfrom.importviewsapp_name='polls'urlpatterns=[path('',views.......
  • django 如何提升性能(高并发)
    django如何提升性能(高并发)对一个后端开发程序员来说,提升性能指标主要有两个一个是并发数,另一个是响应时间网站性能的优化一般包括web前端性能优化,应用服务器性能优化,存......
  • django中间件补充、django操作cookie与session
    django中间件补充、django操作cookie与session目录django中间件补充、django操作cookie与session基于django中间件实现功能的插拔式设计cookie与session简介django操作coo......
  • Swift基础之如何使用iOS 9的Core Spotlight框架
    本文由​​CocoaChina​​译者KingOfOnePiece(博客)翻译作者:GABRIELTHEODOROPOULOS?校对:hyhSuper原文:​​HowToUseCoreSpotlightFrameworkiniOS9​​iOS每一次版本的......
  • 一些 NuGet 程序包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装
    何时重新安装包包还原后的损坏引用:如果已打开项目并还原了NuGet包,但仍看见了损坏的引用,请尝试重新安装每个包。项目因删除文件损坏:NuGet不会阻止删除从包添加的项,因......
  • spring5框架
    概述:Spring是轻量级的开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分:IOC和AOPIOC:控制反转,把创建对象过程交给Spring进行管理AOP:面向切面......
  • 第七阶段:企业框架实战
    认清现实,放弃幻想。(特此感谢动力节点老杜分享出来的学习路线)7.第七阶段:企业框架实战7.1Linux/Centos7.1.1学习目标1.掌握Centos系统常用命令2.掌握......