3

すべての受信リクエストで呼び出されるカスタム wsgi ミドルウェアを作成したいと考えています。URL をチェックし、ユーザーが認証されているかどうかを確認し、リクエストの続行を許可するか拒否します。

django に wsgi ミドルウェアを追加する最良の方法は何ですか?

4

2 に答える 2

1

具体的には、なぜこれを WSGI ミドルウェアとして実行したいのですか? Django は、これらのソフトウェアでは特にうまく動作しません。数年前、Django ミドルウェアを WSGI ミドルウェアと調和させようとする作業がいくつかありましたが、実際にはうまくいきませんでした。

Django には独自のバージョンのミドルウェアがあり、十分に文書化されており、リクエストは約 3 行で実行できます。

于 2013-04-08T12:35:43.740 に答える
0

ここでは wsgi ミドルウェアは必要なく、django ミドルウェアを簡単に使用できます。

some_app/middleware.py

from django.http import HttpResponseForbidden

class AuthenticateMiddleware(object):

    def process_request(self, request):
        #do something with request.path
        if request.user.is_authenticated():
            #can do something or just pass
            #but do not return a response from here
        else:
            #return a response from here so that view doesn't get called
            return HttpResponseForbidden()

process_request()が処理される前に任意のミドルウェアが呼び出されviewます。このメソッドからのインスタンスを返すとHttpResponse、ビューは呼び出されません。HttpResponseForbiddenは のサブクラスであるためHttpResponse、ユーザーが認証されていない場合、ビューは呼び出されません。

このカスタム ミドルウェアを MIDDLEWARE_CLASSES に追加する必要があります。

設定.py

MIDDLEWARE_CLASSES = ( 
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'some_app.middleware.AuthenticationMiddleware',
)
于 2013-04-14T19:49:50.510 に答える