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) 

미들웨어 클래스는

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

SETTINGS.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.py

project/project/middleware.py에서 문제가 어디 있는지 아십니까?

답변

4

장고는 장고 1.10에 new-style middleware을 도입했습니다.

UserHasProfileMiddleware은 새로운 스타일의 미들웨어 클래스입니다. Django 1.10 이상을 사용한다고 가정하면 MIDDLEWARE_CLASSES이 아니라 MIDDLEWARE 설정을 사용해야합니다. 다른 모든 미들웨어는 장고에서 가져온 것이므로 설정을 바꾸면 오류를 해결할 수 있습니다.

MIDDLEWARE = (
    ... 
) 

장고 1.9을 사용하는 경우 또는 이전, 당신은 old-style middlewareUserHasProfileMiddleware 클래스를 은밀한한다.

+0

오, 감사합니다. 이 프로젝트는 Django 버전 1.8.7이므로 필자가 가정 한 메서드 기반 미들웨어를 사용해야합니다. –

+0

예, 이전 버전의 장고를 사용한다면'UserHasProfileMiddleware'를 변경해야합니다. – Alasdair

관련 문제