为什么我无法注册自定义中间件?

时间:2016-10-04 09:40:04

标签: django

我收到错误:

  

TypeError:object()不带参数

我的设置:

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',
]

2 个答案:

答案 0 :(得分:2)

如果您使用的是Django 1.10,那么您需要更新自定义中间件。看这里:Upgrading pre-Django 1.10-style middleware

您可以暂时使用mixin:

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

答案 1 :(得分: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