2016-11-15 6 views
0

Я хочу создать очень простое промежуточное программное обеспечение, которое просто печатает «ОК» по каждому запросу. Проблема заключается в том, что он вызывает ошибку:Пользовательский класс промежуточного класса вызывает ошибку

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

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 

SETTINGS.PY

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' 
) 

Вы знаете, где проблема?

ответ

4

Django представил new-style middleware в Django 1.10.

Ваш UserHasProfileMiddleware - это класс промежуточного ПО нового типа. Предполагая, что вы используете Django 1.10+, вы должны использовать настройку MIDDLEWARE, а не MIDDLEWARE_CLASSES. Все остальные средние от Django, поэтому переименование настройки должно быть достаточно, чтобы исправить ошибку.

MIDDLEWARE = (
    ... 
) 

Если вы используете Django 1.9 или выше, вы должны тайные свой UserHasProfileMiddleware класс old-style middleware.

+0

О, спасибо. Этот проект находится в версии 1.8.7 в Django, поэтому я должен использовать промежуточное ПО на основе метода, я полагаю. –

+0

Да, вам придется изменить свой 'UserHasProfileMiddleware', если вы используете более раннюю версию Django. – Alasdair

 Смежные вопросы

  • Нет связанных вопросов^_^