当前位置: 首页 > news >正文

django 中间件

在主目录下创建了一个middleware.py的文件;

不使用中间件定义的方法

get_response 会跳过默写中间件的方法

import logginglogger = logging.getLogger(__name__)class CountRequestMiddleware():def __init__(self, get_response):self.get_response = get_responseself.count_request = 0self.count_exceptions = 0def __call__(self,request, *args, **kwargs):self.count_request += 1logger.info(f"Handle {self.count_request} requests so far")return self.get_response(request)

使用中间件定义的方法 

中间件中可以定义5个方法,分别是:

  1. process_request(self,request) : 执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象

  2. process_view(self, request, callback, callback_args, callback_kwargs): 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象

  3. process_template_response(self,request,response): 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象

  4. process_exception(self, request, exception) 当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象

  5. process_response(self, request, response) 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象

import logging
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponselogger = logging.getLogger(__name__)class CountRequestMiddleware(MiddlewareMixin):def process_request(self, request):print("my process_request")print(f"[{request.method}] {request.path} - 进入中间件")def process_view(self, request, callback, callback_args, callback_kwargs):print("my process_view")return Nonedef process_template_response(self, request, response):print("my process_template_response")return responsedef process_response(self, request, response):print("my process_response")print(f"[{response.status_code}] {request.path} - 离开中间件")return responsedef process_exception(exception):print("my process_template_response")return HttpResponse(exception)

注册中间件:

将自定义的中间件类注册到settings.py中间件中,把自定义的中间件的类添加到MIDLEWARE的列表当中

可参照 Django 中间件开发完全指南_中间件如何开发-CSDN博客

Django中中间件学习之如何使用自定义中间件-腾讯云开发者社区-腾讯云

http://www.lqws.cn/news/522253.html

相关文章:

  • 打造丝滑的Android应用:LiveData完全教程
  • YOLOv8 改进点详解
  • 联邦学习中的本地迭代误差与全局聚合误差
  • CSMatIO库的安装与C#实现.mat文件生成
  • 数据库系统总结
  • cocos2 实现全局音量管理
  • 51c嵌入式~CAN~合集2
  • 数据文件写入技术详解:从CSV到Excel的ETL流程优化
  • 使用AkShare获取股票报表
  • [省选联考 2025] 推箱子
  • Java 的强制类型转换
  • Sortablejs动态同类型穿插
  • npm 报错:“无法加载文件 ...npm.ps1,因为在此系统上禁止运行脚本” 解决方案(附执行策略说明)
  • 创新让生活更美好丨“鑫亘科技亮相2025上海CMEF,创新医疗材料引领未来!”
  • 【Docker基础】Docker容器管理:docker pause、stop、kill区别
  • Gemini 2.5 Pro vs Claude 4:2025年高考物理真题实战对比评测(国内直接使用)
  • 【Java高频面试问题】JVM篇
  • python接口测试参数multipart/form-data格式不能有多余的空格或 tab 缩进
  • 逆向入门(8)汇编篇-rol指令的学习
  • Windows下Zookeeper客户端启动缓慢问题分析与解决方案
  • oracle物化视图
  • Jenkins JNLP与SSH节点连接方式对比及连接断开问题解决方案
  • 强化学习概述
  • 【Python】图像+点云 结合显示
  • Linux 内存管理之page cache
  • 【PyTorch】保存和加载模型
  • 【cursor实战】分析python下并行、串行计算性能
  • <六> k8s + promtail + loki + grafana初探
  • 深度学习入门--(二)感知机
  • 利用代理IP爬取Shopee网页数据