gpt4 book ai didi

python - Django Rest Framework 自定义响应消息

转载 作者:太空狗 更新时间:2023-10-30 00:31:34 25 4
gpt4 key购买 nike

我有两个关于 Django Rest Framework 响应消息的问题

1.

当使用generics.ListCreateAPIViewRetrieveDestroyAPIView 时,通常返回一个资源

例如,使用 POST 方法调用/map/结果会像一个对象:

{
"x_axis": "23",
"y_axis": "25",
"map_id": 1,
}

我想知道我可以像下面那样将这条消息编辑为自定义吗?

{"成功":"msg blablabla"}

2.

当我使用 serializers.ValidationError 时,我可以写我的自定义消息如果我使用 raise serializers.ValidationError("map_id does not exist")响应消息将是

{"map_id":["map_id does not exist"]}

我可以像下面这样自定义编辑这部分吗?

{"FAIL":"map_id does not exist"}

我想知道这个,因为前端不想要这种格式,他们喜欢:

{"Success":"msg blablabla"}
{"Fail":"msg blablabla"}
{"USERNAME_DUPLICATE":1001}
{"FIELD_REQUIRED":1002}

所以他们可以更方便地告诉用户操作错误的原因?

最佳答案

1 覆盖 View 上的创建方法并放置如下内容:

def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response({"Success": "msb blablabla"}, status=status.HTTP_201_CREATED, headers=headers)

2 在上面的代码中,将 raise_exception 更改为 False 并在序列化器无效时返回任何你想要的。即:

def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
if not serializer.is_valid(raise_exception=False):
return Response({"Fail": "blablal", status=status.HTTP_400_BAD_REQUEST)

self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response({"Success": "msb blablabla"}, status=status.HTTP_201_CREATED, headers=headers)

您正在使用 CBV,因此您将能够创建扩展 DRF 类和 DRY 的自定义泛型类

但是,我会说你不应该在你的响应中添加“成功”或“失败”...如果 http 代码是 2xx 用户会知道它是好的,当请求有问题时是 4xx 并且5xx 当您的代码(或服务器)出现错误时,您无需在响应正文中重复该信息,只需使用 HTTP 状态代码

希望对你有帮助

关于python - Django Rest Framework 自定义响应消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35501137/

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