gpt4 book ai didi

Django rest_framework 自定义错误信息

转载 作者:行者123 更新时间:2023-12-04 14:36:02 24 4
gpt4 key购买 nike

我有一个 API 端点,它将使用 rest_framework 的 serializer.is_valid() 进行输入验证。它将返回自定义错误消息和响应。

serializer = FormSerializer(data=data)
if not serializer.is_valid(raise_exception=False):
return Response({"Failure": "Error"}, status=status.HTTP_400_BAD_REQUEST)

是否可以在不使用 raise_exception=True 提供的通用响应的情况下填充验证错误? ?我试图避免使用通用响应,因为如果存在多个错误,它将显示所有验证错误。

响应将类似于
return Response(
{
"Failure": "Error",
"Error_list": {"field1": "This field is required"}
},
status=status.HTTP_400_BAD_REQUEST
)

最佳答案

创建一个 Custom Exception类为,

from rest_framework.exceptions import PermissionDenied
from rest_framework import status


class MyCustomExcpetion(PermissionDenied):
status_code = status.HTTP_400_BAD_REQUEST
default_detail = "Custom Exception Message"
default_code = 'invalid'

def __init__(self, detail, status_code=None):
self.detail = detail
if status_code is not None:
self.status_code = status_code

为什么我是继承自 PermissionDenied 异常类??
看到这个帖子- Why DRF ValidationError always returns 400

然后在您的序列化程序中,引发异常,
class SampleSerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = SampleModel

def validate_age(self, age): # field level validation
if age > 10:
raise MyCustomExcpetion(detail={"Failure": "error"}, status_code=status.HTTP_400_BAD_REQUEST)
return age

def validate(self, attrs): # object level validation
if some_condition:
raise MyCustomExcpetion(detail={"your": "exception", "some_other": "key"}, status_code=status.HTTP_410_GONE)
return attrs
agenameSampleModel 的两个字段类(class)
响应将是这样的

enter image description here

通过使用这种方法,
1. 您可以自定义 JSON 响应
2. 您可以返回任何状态代码
3. 你不需要通过 Trueserializer.is_valid()方法(不推荐)

关于Django rest_framework 自定义错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51665260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com