gpt4 book ai didi

django - 如何通过 DRF 返回自定义状态码?

转载 作者:行者123 更新时间:2023-12-05 06:33:52 24 4
gpt4 key购买 nike

如果用户发送 POST 请求来创建作业,但该作业已经存在 - 我正在尝试返回 202。

相反,它返回 400..

观看次数

def post(self, request, format=None):
serializer = CreateJobSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化器

class CreateJobSerializer(GenericSerializer):
class Meta:
model = Job
fields = ('name')

def create(self, validated_data):
try:
obj = Job.objects.create(**validated_data)
return obj
except:
return Response(serializer.errors, status=status.HTTP_202_ACCEPTED)

我假设如果在该模型上违反了 unique=true,Job.objects.create 将失败,如果是这种情况,我希望返回 202。我做错了什么?

是否因为 unique=true 错误实际上在验证期间被捕获,所以 create() 从未真正被调用?

最佳答案

我想你可以capture the Validation Error然后使用您想要的状态进行自定义响应(在本例中为 202)。

我还没有尝试过,但这可能有效:

try:
if (serializer.is_valid(raise_exception=True)):
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
except ValidationError as msg:
if str(msg) == "This Email is already taken":
return Response(
{'ValidationError': str(msg)},
status=status.HTTP_202_ACCEPTED
)
else:
return Response(
{'ValidationError': str(msg)},
status=status.HTTP_400_BAD_REQUEST
)

关于django - 如何通过 DRF 返回自定义状态码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50476803/

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