Django全局异常处理全攻略

Django 中处理全局异常,有几种常见的方式,通常目标是:

  • 捕获项目中未被单独处理的错误
  • 统一返回给前端(如 JSON 响应 / 自定义错误页)
  • 方便记录日志

1. 使用 Django 自带的全局异常处理机制

Django 有一些内置的全局错误视图(默认在 django.views.defaults 中):

  • 404 错误:handler404
  • 500 错误:handler500
  • 403 错误:handler403
  • 400 错误:handler400

你可以在项目的 urls.py 中进行重写:

# urls.py
from django.conf.urls import handler404, handler500, handler403, handler400
from django.http import JsonResponsedef custom_404(request, exception):return JsonResponse({"error": "页面未找到"}, status=404)def custom_500(request):return JsonResponse({"error": "服务器错误"}, status=500)def custom_403(request, exception):return JsonResponse({"error": "无权限访问"}, status=403)def custom_400(request, exception):return JsonResponse({"error": "错误请求"}, status=400)handler404 = custom_404
handler500 = custom_500
handler403 = custom_403
handler400 = custom_400

👉 适合处理 HTTP 层面的全局错误


2. 使用中间件捕获全局异常

如果你想在 更底层 捕获异常,可以写一个自定义中间件:

# middlewares.py
import logging
from django.http import JsonResponselogger = logging.getLogger(__name__)class GlobalExceptionMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):try:return self.get_response(request)except Exception as e:logger.error(f"Unhandled Exception: {str(e)}", exc_info=True)return JsonResponse({"error": "服务器内部错误"}, status=500)

然后在 settings.py 中注册:

MIDDLEWARE = [...'your_project.middlewares.GlobalExceptionMiddleware',
]

👉 适合捕获 所有未被显式处理的异常,并进行日志记录 / 统一 JSON 响应。


3. Django REST Framework (DRF) 的全局异常处理

如果你用的是 DRF,可以在 settings.py 中配置全局异常处理函数:

# settings.py
REST_FRAMEWORK = {"EXCEPTION_HANDLER": "your_project.utils.custom_exception_handler"
}

实现 custom_exception_handler

# utils.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
from rest_framework import statusdef custom_exception_handler(exc, context):# 先调用 DRF 默认的异常处理response = exception_handler(exc, context)if response is None:# 没有被 DRF 识别的异常return Response({"error": "服务器内部错误"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)# 可以统一改造返回结构return Response({"error": response.data,"status_code": response.status_code}, status=response.status_code)

👉 适合 API 项目,能让前端统一处理错误。


4. 日志系统与监控

全局异常捕获后,还需要考虑 记录日志报警。常见做法:

  • 在中间件或异常处理函数里调用 logging,写到文件或 ELK。
  • 接入 Sentry,实时监控线上异常。

✅ 总结:

  • 普通 Django 项目:用 handler404/500/403/400 + 中间件
  • API 项目(DRF):用 自定义 exception_handler
  • 日志监控:结合 logging 或 Sentry。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921578.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

MyBatis入门到精通:CRUD实战指南

1. MyBatisORM:对象关系映射O(Object):Java虚拟机中的Java对象R(Relational):关系型数据库M(Mapping):将Java虚拟机中的Java对象映射到数据库表中一行记录&am…

WebRTC开启实时通信新时代

摘要:WebRTC(Web实时通信)是一项开源技术,支持浏览器直接进行低延迟音视频通信和数据传输,无需安装插件。其核心技术包括RTCPeerConnection(建立点对点连接)、MediaStream(媒体流处理…

【51单片机8*8点阵显示箭头动画详细注释】2022-12-1

缘由51单片机实现8*8滚动箭头的程序,运行时什么图案都没有,甚至根本不亮 - 24小时必答区 #include<reg52.h> unsigned char code M[]{0xff,0xff,0xfe,0xfd,0xf8,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfb,0xf0,0xfb,0xfd,0xff,0xff,0xff,0xfb,0xf7,0xe0,0xf7,0xfb,0xff,0xff,0…

手撕Redis底层3-持久化机制与集群化方案

1.Redis持久化机制Redis设计了两种持久化落盘机制&#xff1a;RDB和AOF1.1 RDB持久化RDB持久化是Redis的数据快照&#xff0c;简单来说就是把内存中的所有数据都记录到磁盘中&#xff0c;当Redis实例故障重启后&#xff0c;从磁盘中读取快照文件来恢复数据。快照文件称为RDB文件…

mysql中null值对in子查询的影响

1、场景 有这样一个查询&#xff0c;有些时候是正确的&#xff0c;有些时候没报错但是又查询不到数据&#xff0c;分析数据排查后发现当user_id字段存在null值的时候查询不到数据。select * from table1 where id in (select user_id from talbe2 where status1);2、问题 为什么…

如何在 tortoise-orm 内使用 JSON_EXTRACT

先说结论&#xff1a; # 假设 JsonField 名称为 data&#xff0c;内容为 {"info": {"path": "我的资源创建"}} qs qs.filter(data__filter{"info.path": "我的资源创建"})我查看了 tortoise-orm 官方文档&#xff0c;没有这…

西门子S7-200 SMART PLC:编写最基础的“起保停”程序

一、什么是“起保停”电路&#xff1f;“起保停”是“启动-保持-停止”的简称&#xff0c;也称为“自锁电路”。它是继电器控制系统和PLC程序中最基本、最核心的控制逻辑。启动 (Start): 由一个点动按钮&#xff08;常开触点&#xff09;触发&#xff0c;使设备运行。保持 (H…

漏洞修复 Nginx SSL/TLS 弱密码套件

扫描结果 [rootlocalhost nmap]# docker run --rm -v $(pwd)/results:/results securecodebox/nmap nmap --script ssl-enum-ciphers -p 443 xxx.cn -oX /results/output_0904.xml Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-04 05:02 UTC Nmap scan report for xxx.…

ChartGPT深度体验:AI图表生成工具如何高效实现数据可视化与图表美化?

最近帮运营同事做季度数据报告时&#xff0c;我差点在图表样式上栽跟头 —— 明明数据都算好了&#xff0c;用 Excel 调柱状图的颜色、字体、坐标轴标签&#xff0c;来回改了快半小时&#xff0c;要么字体太大挤在一起&#xff0c;要么颜色搭配显脏&#xff0c;运营催得急&…

深入理解 JVM 字节码文件:从组成结构到 Arthas 工具实践

在 Java 技术体系中&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;是实现 “一次编写&#xff0c;到处运行” 的核心。而字节码文件作为 Java 代码编译后的产物&#xff0c;是 JVM 执行的 “原材料”。今天&#xff0c;我们就从字节码文件的组成结构讲起&#xff0c;再结…

SoundSource for Mac 音频控制工具

SoundSource for Mac 是一款音频控制工具&#xff0c;中文常被称为 音频源管理器。它能够精确控制系统与应用程序的音量、输出设备和音效处理&#xff0c;让用户获得比 macOS 原生更灵活的音频管理体验。SoundSource 既适合音乐发烧友&#xff0c;也适合日常办公和影音娱乐用户…

云平台面试内容(二)

5. VPC、子网、路由、NAT网关、安全组、网络ACL 区别与网络隔离设计 概念区别: VPC(虚拟私有云): VPC是在公有云上划分出的一个用户专属的虚拟网络环境,相当于用户在云上的私有数据中心。用户可以自定义VPC的IP地址段、路由策略等。不同VPC网络隔离,默认互不相通,确保资…

2023 arXiv MapperGPT: Large Language Models for Linking and Mapping Entities

论文基本信息 题目&#xff1a;MapperGPT: Large Language Models for Linking and Mapping Entities作者&#xff1a;Nicolas Matentzoglu, J. Harry Caufield, Harshad B. Hegde, Justin T. Reese, Sierra Moxon, Hyeongsik Kim, Nomi L. Harris, Melissa A Haendel, Christo…

Docker入门到精通:从零基础到生产部署

前言&#xff1a;为什么你需要学习Docker&#xff1f; 想象一下&#xff0c;你开发了一个应用程序&#xff0c;在你的电脑上运行完美&#xff0c;但当你把它交给同事或部署到服务器时&#xff0c;却出现了各种奇怪的问题。这就是著名的"在我机器上能运行"问题。 Do…

HOT100--Day15--98. 验证二叉搜索树,230. 二叉搜索树中第 K 小的元素,199. 二叉树的右视图

HOT100–Day15–98. 验证二叉搜索树&#xff0c;230. 二叉搜索树中第 K 小的元素&#xff0c;199. 二叉树的右视图 每日刷题系列。今天的题目是《力扣HOT100》题单。 题目类型&#xff1a;二叉树。 关键&#xff1a;要深刻理解《递归》 98. 验证二叉搜索树 思路&#xff1a; …

独角数卡对接蓝鲸支付平台实现个人

目录 什么是独角数卡&#xff1f;安装部署教程一、独角数卡安装二、独角数卡支付配置三、独角数卡BUG修复 什么是独角数卡&#xff1f; ‌ ‌ ‌ ‌ ‌ ‌ ‌ 独角数卡(Dujiaoka)‌是一款基于Laravel框架开发的开源式站长自动化售货解决方案&#xff0c;主要用于虚拟商品和数字…

人工智能常见分类

人工智能的分类方式多样&#xff0c;以下是一些常见的分类方法及具体类型&#xff1a; 一、按功能目标分类 弱人工智能&#xff08;ANI&#xff0c;Narrow AI&#xff09;&#xff1a;专注于单一任务&#xff0c;无自主意识&#xff0c;如图像识别&#xff08;人脸解锁&#xf…

PO BAPI bapi_po_create1

当执行BAPI时,需要导入增强字段,其中增强字段包含数值型号字段时,需要增强BADI::ME_BAPI_PO_CUST 代码如下: 记录一下,下次自己继续用 bapi处: ls_te_item-po_item = lv_item.ls_te_item-zz001 = 11.ls_te_item-zz005 = 22.ls_te_item-zz008 = 33.ls_te_item-zz009 = 44…

栈欺骗技术的作用是什么?

好的&#xff0c;我们来详细解释一下“栈欺骗技术”&#xff08;Stack Spoofing&#xff09;的作用。简单来说&#xff0c;栈欺骗技术的核心作用是隐藏程序&#xff08;尤其是恶意软件或安全工具&#xff09;的真实调用链&#xff0c;使其逃避基于栈回溯&#xff08;Stack Walk…