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

DRF自定义异常处理器:如何在错误信息中显示详细提示语

DRF自定义异常处理器:优化ValidationError的message字段显示

当前你的自定义异常处理器使用exc.default_detail获取提示信息,但对于ValidationError来说,这个值是通用的"Invalid input.",而具体的字段错误详情存储在response.data中。要实现更详细的message,可以针对性处理ValidationError类型的异常,提取所有字段的错误信息拼接成自定义提示。

修改后的异常处理器代码

from rest_framework.exceptions import ValidationError
from rest_framework.views import exception_handler

def my_exception_handler(exc, context):
    response = exception_handler(exc, context)

    if response is not None:
        error_code = 'unknown'                
        if hasattr(exc, 'default_code') :
            error_code = exc.default_code

        message = ''
        # 专门处理ValidationError,提取所有错误详情
        if isinstance(exc, ValidationError):
            error_messages = []
            # 处理字段级错误(字典格式)
            if isinstance(response.data, dict):
                for field, errors in response.data.items():
                    for err in errors:
                        error_messages.append(f"{field}: {err}")
            # 处理全局非字段级错误(列表格式)
            elif isinstance(response.data, list):
                error_messages.extend(response.data)
            # 拼接成最终提示,若没有提取到则用默认信息
            message = '; '.join(error_messages) if error_messages else exc.default_detail
        elif hasattr(exc, 'default_detail'):
            message = exc.default_detail
                   
        error = {
            "error": response.data,
            "code": error_code,
            'message': message,
        }
        response.data = error

    return response

效果说明

修改后,发送非法数据时的响应会变成:

{
    "error": {
        "email": [
            "Enter a valid email address."
        ],
        "phone_number": [
            "asd is not a valid phone"
        ]
    },
    "code": "invalid",
    "message": "email: Enter a valid email address.; phone_number: asd is not a valid phone"
}

你可以根据需求调整错误信息的拼接格式,比如用换行符\n替代分号,或者直接返回错误信息列表(把message设为error_messages即可)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:05:17