使用DRF时,Django的ValueError(django.core.exceptions)和IntegrityError(django.db)不被处理。
DRF's def exception_handler
有(APIException、Http404、PermissionDenied)的异常处理代码
下面是一个代码Http404
elif isinstance(exc, Http404):
msg = _('Not found.')
data = {'detail': six.text_type(msg)}
set_rollback()
return Response(data, status=status.HTTP_404_NOT_FOUND)
所以我可以创建我的自定义异常处理程序
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
if isinstance(exc, ValidationError) or isinstance(exc, IntegrityError):
data = {
'errors': str(exc)
}
set_rollback() # not sure about this line
response = Response(data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return response
我不确定的目的set_rollback()
代码中的一行,不确定我使用这段代码是否安全。
原因是IntegrityError
and ValueError
默认情况下,DRF 中不处理它们,因为它们需要根据具体情况进行处理。因此,编写像您在这里尝试执行的通用异常处理程序可能不是正确的方法。
例如,一些IntegrityErrors
也许可以忽略,但在资金转移过程中发生的类似情况则不能。所以最好尝试这样的事情:
def create(self, request):
try :
return super(MyViewSet, self).create(request)
except IntergrityError:
# your decision here how to handle it.
raise APIException(detail='Custom message')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)