use*_*364 5 python django django-rest-framework
我有两个关于Django Rest Framework响应消息的问题
1.
使用时,generics.ListCreateAPIView或RetrieveDestroyAPIView通常返回资源
例如,使用POST方法调用/ map /结果将像一个对象:
{
"x_axis": "23",
"y_axis": "25",
"map_id": 1,
}
Run Code Online (Sandbox Code Playgroud)
我想知道我可以将此邮件编辑为自定义,如下所示吗?
{"Success":"msg blablabla"}
2.
当我使用时serializers.ValidationError,如果我使用raise serializers.ValidationError("map_id does not exist")
响应消息,我可以编写自定义消息
{"map_id":["map_id does not exist"]}
Run Code Online (Sandbox Code Playgroud)
我可以将此部件编辑为自定义,如下所示吗?
{"FAIL":"map_id does not exist"}
Run Code Online (Sandbox Code Playgroud)
我想知道这个,因为前端不想要这种格式,他们喜欢:
{"Success":"msg blablabla"}
{"Fail":"msg blablabla"}
{"USERNAME_DUPLICATE":1001}
{"FIELD_REQUIRED":1002}
Run Code Online (Sandbox Code Playgroud)
那么他们可以更方便地告诉用户操作错误原因吗?
ple*_*ong 12
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
您正在使用CBV,因此您将能够创建扩展DRF类和DRY的自定义泛型类
但是,我要说你不应该在你的回复中添加"成功"或"失败"...如果http代码是2xx,用户会知道它没问题,4xx当请求有问题时5xx您的代码(或服务器)出错,您不需要在响应正文上重复该信息,只需使用HTTP状态代码
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
8434 次 |
| 最近记录: |