【发布时间】:2019-03-05 14:33:08
【问题描述】:
Django 中间件有一个process_exception 钩子,可用于捕获异常和处理程序。
但是在使用 Django restframe work 时出现了一些问题
class ExceptionHandler(MiddlewareMixin):
@staticmethod
def process_exception(request, exception):
if isinstance(exception, ValidationError):
return Response(data=exception.messages, status=status.HTTP_400_BAD_REQUEST)
例如,我尝试使用上面的中间件来捕获ValidationError并返回HTTP 400
但它不会工作并引发以下错误
AssertionError: .accepted_renderer not set on Response
事实证明,rest-framework 视图层会在响应中添加一个.accepted_renderer。
如果我在视图之外处理异常。该属性将被遗漏并导致另一个异常。
所以我的问题是:使用 django rest-framework 时在中间件中处理异常是错误的吗?
正确的做法是什么?
【问题讨论】:
标签: python django django-rest-framework django-middleware