Skip to main content
 首页 » 编程设计

python之Django 中间件错误

2024年08月19日31grandyang

我正在尝试通过引用示例编写自定义 django 中间件包 here :

from django.conf import settings 
 
class StackOverflowMiddleware(object): 
    def process_exception(self, request, exception): 
        if settings.DEBUG: 
            print exception.__class__.__name__ 
            print exception.message 
        return None 

这存在于位置 venv/lib/python2.7/site-packages/django_error_assist/middleware.py

我尝试在我的 django 设置中调用/包含这个中间件,如下所示:

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django_error_assist.middleware.StackOverflowMiddleware', ] 

但是我得到了一个追溯,我一直在努力摆脱它,如下所示:

File "/Users/Shyam/PycharmProjects/untitled/untitled/wsgi.py", line 16, in <module> 
    application = get_wsgi_application() 
  File "/Users/Shyam/PycharmProjects/untitled/venv/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application 
    return WSGIHandler() 
  File "/Users/Shyam/PycharmProjects/untitled/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 151, in __init__ 
    self.load_middleware() 
  File "/Users/Shyam/PycharmProjects/untitled/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 82, in load_middleware 
    mw_instance = middleware(handler) 
TypeError: object() takes no parameters 

我哪里错了?任何线索/帮助将不胜感激。我试图让这个中间件成为一个 pip 包。

我也做了调查 this 的功课, this当然还有官方的 django link但无法从这些方面获得太多帮助,因为我哪里出错了。

请您参考如下方法:

在 1.10 版本的 Django 中,中间件必须接受 get_response agrument,参见 docs .将您的类(class)更改为:

class StackOverflowMiddleware(object): 
    def __init__(self, get_response): 
        self.get_response = get_response 
 
    def __call__(self, request): 
        response = self.get_response(request) 
        return response 
 
    def process_exception(self, request, exception): 
        if settings.DEBUG: 
            print exception.__class__.__name__ 
            print exception.message 
        return None