我有两个关于Django Rest Framework响应消息的问题
1
使用generics.ListCreateAPIView
或RetrieveDestroyAPIView
时,通常会返回资源
例如,使用POST方法调用/ map / 结果将像一个对象:
{
"x_axis": "23",
"y_axis": "25",
"map_id": 1,
}
我想知道我可以将此邮件编辑为自定义,如下所示吗?
{"Success":"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}
那么他们可以更方便地告诉用户操作错误原因吗?
答案 0 :(得分:11)
1在视图上覆盖create方法并输入如下内容:
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状态代码希望这有帮助