2016-10-04 85 views
1

我得到一個錯誤:爲什麼我無法註冊自定義中間件?

TypeError: object() takes no parameters

我的設置:

1)中間件功能motion/middleware/CountVisits

class Count(object): 
    def process_request(self,request): 
     if request.session['visits']: 
      request.session['visits']+=1 
     else: 
      request.session['visits']=1 

設置:

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', 
    'motion.middleware.CountVisits.Count', 
] 
+0

你用什麼Django的版本? – skovorodkin

+0

我使用Django版本1.10 –

+0

明白了,查看我的答案。有一個鏈接到Django文檔,它解釋瞭如何升級你的中間件類。 – skovorodkin

回答

2

如果你是在Django的1.10,那麼你需要更新你定製的中間件。看這裏:Upgrading pre-Django 1.10-style middleware

您可以暫時使用一個混合:

from django.utils.deprecation import MiddlewareMixin 

class Count(MiddlewareMixin): 

    def process_request(self, request): 
     if request.session['visits']: 
      request.session['visits'] += 1 
     else: 
      request.session['visits'] = 1 
+0

謝謝,我無法弄清楚我怎麼可能會錯過它,我只是在發佈問題之前閱讀相同的頁面。我可以在4分鐘內接受答案:) Spasibo! –

1

你不必__init__ 。正因爲如此,您的班級不符合中間件簽名。試試這個

class Count(object): 
    def __init__(self, get_response): 
     self.get_response = get_response 
     # One-time configuration and initialization. 

    def process_request(self, request): 
     if request.session['visits']: 
      request.session['visits']+ = 1 
     else: 
      request.session['visits'] = 1 

https://docs.djangoproject.com/en/1.10/topics/http/middleware/#writing-your-own-middleware

+0

謝謝,但案件是我應該繼承MiddlewareMixin –