2016-10-04 81 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 –