使用ParseError Django REST框架返回无效数据
关于在序列化程序之外验证Django REST框架中的数据,我有一个类似的问题: 我的代码:使用ParseError Django REST框架返回无效数据,django,rest,python-2.7,django-rest-framework,Django,Rest,Python 2.7,Django Rest Framework,关于在序列化程序之外验证Django REST框架中的数据,我有一个类似的问题: 我的代码: def pre_save(self, obj): data = self.request.DATA['users'] for user in data: if not user in allowed_users: raise ParseError('An unpermitted user has been included') 从跟踪来看,它似
def pre_save(self, obj):
data = self.request.DATA['users']
for user in data:
if not user in allowed_users:
raise ParseError('An unpermitted user has been included')
从跟踪来看,它似乎正在尝试发送响应,但失败原因如下:
“”需要为字段设置一个值,才能使用此多对多关系
更新:
我将ParseError提升到get_serializer_class()方法中,如下所示:
def get_serializer_class(self):
if 'users' in self.request.DATA:
# make sure the users are allowed
data = self.request.DATA['users']
for user in data:
if not user in allowed_users:
raise ParseError(detail='Unpermitted user')
return serializer
这会引发异常,但是,它不会使用REST框架的JSON响应返回异常。相反,我得到了django堆栈跟踪和一个500错误,这是不好的
谢谢 看看-这是DRF处理请求期间引发的异常的地方
从文档中:
默认实现处理rest\u framework.exceptions.APIException
的任何子类,以及Django的Http404
和PermissionDenied
异常,并返回适当的错误响应
如果需要自定义API返回的错误响应,则应将此方法子类化
因此,您也需要重写它来处理ParseError
异常
还可以查看上的DRF文档
我希望这会有所帮助。当在viewclass的pre_save method()、post_save()甚至post()方法中引发异常时,Django REST框架正确地处理了该异常。如果我使用了curl或类似的方法,那么错误就会正确返回 这实际上是可浏览API中的一个bug,这是我用来测试的——使用“原始数据”表单发送数据。当试图呈现html响应时,DRF显然试图捕获文章的“上下文”。在这种情况下,它需要保存/完成的帖子 这是不存在的,所以抛出了Django渲染错误,这让我很困惑 使用curl进行测试时,响应是准确的
请注意,像我一样将其放入get_serializer_class(),会导致它超出DRF异常处理程序,因此Django正确地呈现了它,并显示错误被正确抛出。感谢Carlton提供的提示。看起来问题更多地与可浏览的API有关。