2016-10-04 11 views
1

私はエラーを取得する:カスタムミドルウェアを登録できないのはなぜですか?

TypeError: object() takes no parameters

マイセットアップ:motion/middleware/CountVisits

1)ミドルウェア機能:

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

を試してみてください。ここを見てください: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__を持っていません。このため、あなたのクラスはミドルウェアの署名に従いません。あなたがDjangoの1.10上にある場合は、カスタムミドルウェアを更新する必要があり、この

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から継承する必要がありました –

関連する問題