django-rest-framework自定义错误消息作为响应

时间:2015-01-01 00:43:18

标签: error-handling django-rest-framework

对于我的API,我需要使用HTTP 200和JSON内容来响应每个请求的错误。所以不要回答:

Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我想这样做:

res = {"code": 400, "message": "Bad Requset"}
Response(res)

放置此类物品的最佳位置在哪里以及如何?在SerializerRendererException?我需要捕获序列化程序可能抛出的每个异常以及我编写的自定义异常。

1 个答案:

答案 0 :(得分:7)

您可以使用状态代码 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,您可以创建自定义处理程序并执行此操作。

然而,由于api端点通常是每个视图基础,我个人建议创建一个自定义装饰器来包装您的视图并在出现错误时返回此类响应。 或者,如果您确实想要对所有错误返回相同的响应,那么请按照RestFramework文档自定义错误处理应该是最佳做法。

希望这有帮助。