【问题标题】:How to capture exception in django rest framework with django middleware?如何使用 django 中间件在 django rest 框架中捕获异常?
【发布时间】: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


    【解决方案1】:

    在 Django Rest 框架中执行此操作的更好方法是创建自定义异常处理程序并将默认异常处理程序替换为您的自定义处理程序。有关它的更多详细信息,您可以查看官方文档:http://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多