如何使用django中间件捕获django rest框架中的异常?

时间:2018-09-30 05:23:29

标签: python django django-rest-framework django-middleware

Django中间件具有一个<nav> <ul> <li><a href="">Home</a></li> <li><a href="">About</a></li> <li class="input-parent"> <div class="col-sm-12 col-md-12 col-lg-3 my-1 divSearch"> <form> <div> <input placeholder="Search"> <button type="submit"> <img> </button> </div> </form> </div> </li> </ul> </nav>钩子,可用于捕获异常和处理程序。

但是在使用Django restframe工作时存在一些问题

process_exception

例如,我尝试使用上述中间件捕获class ExceptionHandler(MiddlewareMixin): @staticmethod def process_exception(request, exception): if isinstance(exception, ValidationError): return Response(data=exception.messages, status=status.HTTP_400_BAD_REQUEST) 并返回HTTP 400

但是它将无法正常工作并引发以下错误

ValidationError

事实证明,其余框架视图层将在响应中添加AssertionError: .accepted_renderer not set on Response

如果我在视图外部处理异常。此属性将丢失,并导致另一个异常。

所以我的问题是:使用Django rest-framework处理中间件中的异常是否错误?

正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

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