2017-10-03 10 views
2

私はMiddleWareを動作させるのに苦労しています。SimpleMiddlewareの実装方法は?

MIDDLEWARE_CLASSES = [ 
    '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', 
    'portal.middleware.SimpleMiddleware' 
] 

を、私はportal/middleware/MiddleWare.pyでこのクラスを実装:私は私のsettings.pyでこれを入れ

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

    def __call__(self, request): 
     # Code to be executed for each request before 
     # the view (and later middleware) are called. 

     response = self.get_response(request) 

     # Code to be executed for each request/response after 
     # the view is called. 

     return response 

しかし、実行しているとき、私はTypeErrorを得る:

TypeError: __init__() takes exactly 2 arguments (1 given) 
+0

あなたのdjangoバージョンは何ですか? –

+0

@BearBrown 1.10.2 –

+0

'' portal.middleware.SimpleMiddleware ''の設定では、ポータル/ミドルウェアの '' SimpleMiddleware''クラスにあなたのファイル名 '' portal/middleware/MiddleWare.py'と一致しません。 Pythonでは、CamelCaseのモジュール名を避けるのが普通です。 – Alasdair

答えて

2

あなたが書いているので、新しいスタイルのミドルウェアの場合は、設定にMIDDLEWARE_CLASSESの代わりにMIDDLEWAREを使用する必要があります。

また、設定のエントリがミドルウェアの場所と一致していることを確認する必要があります。エントリ'portal.middleware.SimpleMiddleware'portal/middleware.pySimpleMiddlewareクラスを示していますが、ファイル名はportal/middleware/MiddleWare.pyと一致しません。

+0

しました。しかし、今は何もロードされていないようです。私の 'MiddleWare.py'ファイルの構文エラーでさえ捕らえられません。 –

+0

どこでも 'MiddleWare.py'を参照しているようではありません。あなたの設定は' portal.middleware'を参照しています。 – Alasdair

+1

はい、私はそれを見つけることができないというエラーを期待していました。これは、まだ古い '.pyc'ファイルが残っていて、クラスを提供しています。 (私は実験して遊んでいた...)。私は今それを持っているように見えます。 –

関連する問題