django-rest-framework - 序列化器 ValidationError 的自定义格式

标签 django-rest-framework django-serializer django-validation

我在我的序列化器之一中有一个自定义对象级验证器:

def validate(self, data):
    # some checks on token
    # set token to True or False
    
    if not token:
        raise serializers.ValidationError(
            {
                "status": "failed",
                "message": _("token is not valid"),
            }
        )
    
    return data

我期望得到的输出是这样的:

{
    "status": "failed",
    "message": "token is not valid"
}

但是,我实际得到的是:

{
    "status": [
        "failed"
    ],
    "message": [
        "token is not valid"
    ]
}

有什么办法可以实现我想要的吗?

最佳答案

创建自定义ValidatorError类:

from rest_framework import serializers, status
from rest_framework.exceptions import APIException


class PlainValidationError(APIException):
    status_code = status.HTTP_400_BAD_REQUEST
    default_detail = _("Invalid input.")
    default_code = "invalid"

    def __init__(self, detail=None, code=None):
        if not isinstance(detail, dict):
            raise serializers.ValidationError("Invalid Input")
        self.detail = detail

不要使用 serializers.ValidationError,而是使用自定义 ValidationError 类:

def validate(self, data):
    # some checks on token
    # set token to True or False
    
    if not token:
        raise PlainValidationError(
            {
                "status": "failed",
                "message": _("token is not valid"),
            }
        )
    
    return data

它并不完美,但它适合我。

关于django-rest-framework - 序列化器 ValidationError 的自定义格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71345107/

相关文章:

python - 得到断言错误是我的Django(1.8.4)

python - 对象没有属性 'build_absolute_uri' - Django Rest Framework

python - django rest 框架中补丁方法的验证

python - 如何检测 obj 是否在 ModelForm.clean 中添加或编辑?

python - 你能优化这段代码吗? ( Django , python )

python - Mongoengine 序列化器错误 | python | Django 休息框架

android - 如何解决错误 `java.net.ConnectException: Failed to connect to localhost/127.0.0.1:8000`

python - 分别获取查询集中每个项目的计数 Django DRF

python - Django Rest Framework 中嵌套序列化程序的唯一验证

python - Django:检查对象是否存在但不是对象的当前实例