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

nor*_*tpy 3 error-handling django-rest-framework

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

Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

我想这样做:

res = {"code": 400, "message": "Bad Requset"}
Response(res)
Run Code Online (Sandbox Code Playgroud)

放这种东西的最佳地点在哪里以及如何?在Serializer,Renderer,Exception?我需要捕获序列化程序可能抛出的每个异常以及我编写的自定义异常.

Anz*_*zel 7

您可以使用状态代码200data=json.dumps(...),如下所示:

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

在处理异常的位置方面,RestFramework涵盖了它,阅读Exceptions - Django REST框架,您可以创建自定义处理程序并执行此操作.

但是由于api端点通常是每个视图基础,我个人建议创建一个自定义装饰器来包装你的视图并在出错时返回这样的响应.或者,如果您真的想要对所有错误返回相同的响应,那么请遵循RestFramework文档并自定义您的错误处理应该是最佳实践.

希望这可以帮助.