You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中间件中将HTTPResponse转为带Traceback的JSONResponse?

Django中间件实现500错误转指定JSON格式

实现思路

通过Django中间件的process_exception方法直接捕获未处理的异常,拿到完整调用栈信息;同时在__call__方法中处理已生成的500响应,确保所有500级错误都能转成目标JSON格式。

代码实现

1. 编写中间件类

在项目中创建中间件文件,比如middlewares/error_converter.py:

import traceback
from django.http import JsonResponse
from django.conf import settings

class ErrorToJsonMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        # 处理已生成的500非JSON响应
        if response.status_code == 500 and not isinstance(response, JsonResponse):
            exception = getattr(request, 'exception', None)
            error_msg = str(exception) if exception else "Internal Server Error"
            tb_content = traceback.format_exc() if exception else "No traceback available"
            
            return JsonResponse(
                {
                    "error": error_msg,
                    "traceback": tb_content if settings.DEBUG else "Traceback hidden in production"
                },
                status=500
            )
        return response

    def process_exception(self, request, exception):
        # 捕获未处理的异常,直接返回JSON响应
        tb_content = traceback.format_exc()
        return JsonResponse(
            {
                "error": str(exception),
                "traceback": tb_content if settings.DEBUG else "Traceback hidden in production"
            },
            status=500
        )

2. 注册中间件

在settings.py的MIDDLEWARE列表中添加该中间件(建议放在靠前位置,确保优先捕获异常):

MIDDLEWARE = [
    # 其他中间件...
    'your_project.middlewares.error_converter.ErrorToJsonMiddleware',
]

关键说明

  • process_exception是捕获未处理异常的核心入口,能直接获取异常对象和完整调用栈,是处理500错误的最优时机。
  • __call__方法的逻辑用于兜底,处理那些已经被其他中间件生成的500响应(比如Django默认的错误页面)。
  • 生产环境下通过settings.DEBUG控制是否返回真实调用栈,避免泄露服务器敏感信息。
  • 如果需要扩展处理其他错误状态码(如404、403),可在__call__方法中添加对应状态码的判断逻辑。

内容的提问来源于stack exchange,提问作者Akhil Chakicherla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:45:42