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

DRF自定义Exception Handler未触发,需ValidationError返回JSON响应

解决DRF自定义异常处理器未触发ValidationError的问题

可能的原因及解决方案


1. 未正确导入DRF默认的exception_handler

你的自定义处理器中调用了exception_handler(exc, context),但如果没有从DRF导入该函数,会导致调用失败,处理器无法正常执行。

修正代码:
在exception_handler.py顶部添加正确的导入:

from rest_framework.views import exception_handler
from rest_framework.exceptions import ValidationError
from rest_framework.response import Response
from rest_framework import status

2. 使用了Django原生的ValidationError而非DRF版本

DRF的异常处理器仅默认捕获自身定义的异常类,若你在序列化器中导入的是Django原生的ValidationError,处理器不会触发。

修正代码:
将序列化器中的导入替换为DRF版本:

# 替换之前的导入(若有)
# from django.core.exceptions import ValidationError
from rest_framework.exceptions import ValidationError

3. 自定义处理器未针对ValidationError添加处理逻辑

默认的exception_handler会为ValidationError生成基础响应,但如果你的处理器未对其进行自定义处理或未返回响应,可能导致你误以为未触发。

完整的自定义处理器示例:

def handler(exc, context):
    # 先调用DRF默认处理器获取基础响应
    response = exception_handler(exc, context)

    # 针对ValidationError生成自定义JSON响应
    if isinstance(exc, ValidationError):
        return Response(
            {
                "code": status.HTTP_400_BAD_REQUEST,
                "message": "参数验证失败",
                "errors": exc.detail
            },
            status=status.HTTP_400_BAD_REQUEST
        )

    # 其他异常沿用默认处理或继续自定义
    return response

4. settings.py中的配置路径错误

检查EXCEPTION_HANDLER的路径是否与实际文件结构匹配:

  • 确认api/utils/exception_handler.py文件存在
  • 确认文件中定义的函数名为handler(大小写敏感)
  • 检查路径是否有拼写错误(比如api.utils.exception_handler.handler是否正确)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:21:12