从未调用过程异常的中间件

问题描述 投票:0回答:2

我有这个middelware,它可以捕获500/400异常并处理它们。但它永远不会被称为。我把它放在MIDDLEWARE_CLASSES的开头和结尾但是当引发异常时它仍然没有运行:

垂直/ middleware.py:

class HandleExceptionsMiddleware(object):
       def process_exception(self, request, exception):
             print >> sys.stderr, "exception has been raised"
             # Get the exception info now, in case another exception is thrown later.
             if isinstance(exception, http.Http404):
                   return self.handle_404(request, exception)
             else:
                   return self.handle_500(request, exception)

settings.朋友

MIDDLEWARE_CLASSES = (
       'vertical.middleware.HandleExceptionsMiddleware',
       'django.contrib.sessions.middleware.SessionMiddleware',
       'django.middleware.common.CommonMiddleware',
       'debug_toolbar.middleware.DebugToolbarMiddleware',
       'django.middleware.csrf.CsrfViewMiddleware',
       'django.contrib.auth.middleware.AuthenticationMiddleware',
       'django.contrib.messages.middleware.MessageMiddleware',
       'django.middleware.clickjacking.XFrameOptionsMiddleware',
 )
python exception-handling django
2个回答
0
投票

中间件在响应阶段以相反的顺序运行,其中包括process_exception。如果异常中间件返回响应,则根本不会调用该中间件之上的中间件类。


0
投票

以下清单帮助我解决了类似的问题:

  1. 检查中间件是否正确创建(refer to middleware docs
  2. 使用您正在处理的中间件检查MIDDLEWARES中的python虚线路径
  3. 检查您的中间件是否位于MIDDLEWARES的底部

如果仍然无法正常工作,则意味着其他中间件会捕获异常并返回响应,或者其他中间件无法按顺序或过早地调用您的视图。

  1. 检查您的其他中间件是否正在返回None(显式或隐式)
  2. 检查你的其他中间件是不是在view_func中直接调用process_view
© www.soinside.com 2019 - 2024. All rights reserved.