Django-Rest-Framework自定义错误消息作为响应

3
对于我的API,我需要用HTTP 200和JSON内容回应每一个请求的错误。因此,不要像这样回应请求:
```html ```
请提供更加详细的翻译或许你想了解关于API的一些知识,以便我们可以更好地理解并为您服务。
Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我想做这件事:
res = {"code": 400, "message": "Bad Requset"}
Response(res)

在哪里以及如何最好地放置这个东西?在SerializerRendererException中?我需要捕获序列化器可能抛出的所有异常,以及我编写的自定义异常。
1个回答

10

您可以使用状态码200以及data=json.dumps(...)这样的方式:

res = {"code": 400, "message": "Bad Requset"}
return Response(data=json.dumps(res), status=status.HTTP_200_OK)

关于如何处理异常,RestFramework 已经做好了,详见 Exceptions - Django REST framework,你可以创建一个自定义 handler 来处理。

不过,由于 API 通常是基于视图的,我个人建议创建一个自定义 decorator 来包装你的视图,在发生错误时返回这样的 Response。或者,如果你真的想在所有错误上返回相同的响应,则按照 RestFramework 文档自定义你的错误处理应该是最佳实践。

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接