すべての受信リクエストで呼び出されるカスタム wsgi ミドルウェアを作成したいと考えています。URL をチェックし、ユーザーが認証されているかどうかを確認し、リクエストの続行を許可するか拒否します。
django に wsgi ミドルウェアを追加する最良の方法は何ですか?
すべての受信リクエストで呼び出されるカスタム wsgi ミドルウェアを作成したいと考えています。URL をチェックし、ユーザーが認証されているかどうかを確認し、リクエストの続行を許可するか拒否します。
django に wsgi ミドルウェアを追加する最良の方法は何ですか?
具体的には、なぜこれを WSGI ミドルウェアとして実行したいのですか? Django は、これらのソフトウェアでは特にうまく動作しません。数年前、Django ミドルウェアを WSGI ミドルウェアと調和させようとする作業がいくつかありましたが、実際にはうまくいきませんでした。
Django には独自のバージョンのミドルウェアがあり、十分に文書化されており、リクエストは約 3 行で実行できます。
ここでは 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',
)