簡體   English   中英

自定義中間件類引發錯誤

[英]Custom middleware class raises error

我想創建一個非常簡單的中間件,該中間件僅在每個請求上都打印“ OK”。 問題是它引發錯誤:

Traceback (most recent call last):
  File "c:\python27\Lib\wsgiref\handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\core\handlers\wsgi.py", line 170, in __call__
    self.load_middleware()
  File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\core\handlers\base.py", line 52, in load_middleware
    mw_instance = mw_class()
TypeError: __init__() takes exactly 2 arguments (1 given)

中間件類在project/project/middleware.py

中間件

class UserHasProfileMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        print 'OK'
        return response

設定值

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'SolutionsForLanguages.middleware.UserHasProfileMiddleware'
)

您知道問題出在哪里嗎?

Django在Django 1.10中引入了新型中間件

您的UserHasProfileMiddleware是一種新型的中間件類。 假設您使用的是Django 1.10+,則應使用MIDDLEWARE設置,而不是MIDDLEWARE_CLASSES 所有其他中間件均來自Django,因此重命名設置應足以解決該錯誤。

MIDDLEWARE = (
    ...
)

如果您使用的是Django 1.9或更早版本,則應將UserHasProfileMiddleware類轉換為舊式Middleware

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM