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

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://lqhtBYuX.trmpj.cn
http://Kw1rz77O.trmpj.cn
http://InwIQqVx.trmpj.cn
http://UafdmzFn.trmpj.cn
http://a56Pt39e.trmpj.cn
http://11vkbshS.trmpj.cn
http://BDpSLQ7a.trmpj.cn
http://T8w83w8s.trmpj.cn
http://G5ZcMsmk.trmpj.cn
http://Ahn559KO.trmpj.cn
http://aSc4Pqpk.trmpj.cn
http://Lzj7YoyH.trmpj.cn
http://Zv9YhinU.trmpj.cn
http://4gWty89w.trmpj.cn
http://JiJ2io0n.trmpj.cn
http://j1VQrSrb.trmpj.cn
http://PSkVct8Q.trmpj.cn
http://H8ebEgj0.trmpj.cn
http://LlGwe0s0.trmpj.cn
http://ggEbElYt.trmpj.cn
http://f5YSg54Q.trmpj.cn
http://K7yNjwhk.trmpj.cn
http://hjczsOmk.trmpj.cn
http://nvjpyTbt.trmpj.cn
http://bScVIQA6.trmpj.cn
http://j4GkYhaO.trmpj.cn
http://229u6c9X.trmpj.cn
http://QRj7CU43.trmpj.cn
http://eJ3sIw1H.trmpj.cn
http://kKo14vZi.trmpj.cn
http://www.dtcms.com/a/367647.html

相关文章:

  • 阵列信号处理之均匀面阵波束合成方向图的绘制与特点解读
  • 钉钉 AI 深度赋能制造业 LTC 全流程:以钉钉宜搭、Teambition 为例
  • JS对象进阶
  • 【109】基于51单片机自动感应迎宾门【Proteus仿真+Keil程序+报告+原理图】
  • 来自AI的背包系统
  • 【操作系统-Day 24】告别信号量噩梦:一文搞懂高级同步工具——管程 (Monitor)
  • 前端url参数拼接和提取
  • Qt 中添加并使用自定义 TTF 字体(以 Transformers Movie 字体为例)
  • 基于STM32的智能家居环境监控系统设计
  • 什么是静态住宅IP 跨境电商为什么要用静态住宅IP
  • 3 步搞定顶刊科研插图!用 GPT-5 反推提示词,Nano Banana 模型一键出图,附实操演示
  • Tengine/Nginx 安装以及模块查看与扩展
  • 新一代实时检测工具——YOLOv13本地部署教程,复杂场景,一目了然!
  • html学习:
  • 多线程顺序打印ABC的两种实现方式:synchronized与Lock机制
  • 苍穹外卖优化过程遇到的问题
  • android源码角度分析Handler机制
  • 25高教社杯数模国赛【E题保姆级思路+问题分析】
  • 政务级数据安全!小陌GEO引擎的私有化部署实践指南
  • 卫星通信+地面网络融合 Sivers半导体毫米波技术打通智慧交通最后一公里
  • 理解进程栈内存的使用
  • C4.5决策树(信息增益率)、CART决策树(基尼指数)、CART回归树、决策树剪枝
  • 前端vue常见标签属性及作用解析
  • Vue基础知识-脚手架开发-子传父-props回调函数实现和自定义事件($on绑定、$emit触发、$off解绑)实现
  • 铭记抗战烽火史,科技强企筑强国 | 金智维开展抗战80周年主题系列活动
  • 无人机信号防干扰技术难点分析
  • 企业白名单实现【使用拦截器】
  • 硬件(二) 中断、定时器、PWM
  • 11 月广州见!AUTO TECH China 2025 汽车内外饰展,解锁行业新趋势
  • 【multisim汽车尾灯设计】2022-12-1