如何从Django中的其他中间件捕获中间件异常

时间:2019-07-12 06:50:09

标签: python django

我现在使用Django编码后端系统,并且我希望控制Django中的所有异常,因此我创建了一个中间件(名称为CustomExceptoinMiddleware来控制异常。
但是有时其他中间件也会引发异常,我希望CustomExceptoinMiddleware也可以捕获它,但是我不知道该怎么做。

有人可以帮我吗?
预先感谢!

Python版本:3.7
Django版本:2.2.3

Setting.py

MIDDLEWARE = [
    ...
    "api.core.middleware.CustomExceptoinMiddleware ",
    "api.core.middleware.RaiseExcceptionMiddleware",
    ...
]
# middleware.py

class CustomExceptoinMiddleware(MiddlewareMixin):
    def process_exception(self, request, exception):
        print(f"Capture exception: {type(exception)}")

class RaiseExcceptionMiddleware(MiddlewareMixin):
    def process_request(self, request):
        raise KeyError()

1 个答案:

答案 0 :(得分:0)

您不能那样做。正如您在文档(https://docs.djangoproject.com/en/2.2/topics/http/middleware/#process-exception中所读到的那样),您只能从视图中捕获异常。更详细:

  

同样,中间件在响应阶段以相反的顺序运行,   其中包括process_exception。如果异常中间件返回一个   响应,中间件类的process_exception方法   上面的中间件根本不会被调用。