모든 들어오는 요청에 대해 호출되는 커스텀 wsgi 미들웨어를 작성하고 싶습니다. URL을 확인하고 사용자가 인증되어 요청이 진행되거나 거부 될 경우 허용합니다.django 용 커스텀 wsgi 미들웨어 정의 방법
django에서 wsgi 미들웨어를 추가하는 가장 좋은 방법은 무엇입니까?
모든 들어오는 요청에 대해 호출되는 커스텀 wsgi 미들웨어를 작성하고 싶습니다. URL을 확인하고 사용자가 인증되어 요청이 진행되거나 거부 될 경우 허용합니다.django 용 커스텀 wsgi 미들웨어 정의 방법
django에서 wsgi 미들웨어를 추가하는 가장 좋은 방법은 무엇입니까?
왜 WSGI 미들웨어로 이것을 수행 하시겠습니까? Django는 몇 년 전 Django 미들웨어와 WSGI 미들웨어를 조화시키려는 시도가 있었지만 실제로는 아무 것도 얻지 못했습니다.
Django는 very well documented 인 미들웨어 버전을 보유하고 있으며 약 3 줄의 요청을 처리 할 수 있습니다.
여기서 wsgi 미들웨어가 필요하지 않으며 django 미들웨어를 쉽게 사용할 수 있습니다. view
처리하기 전에
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()
호출된다. 이 메서드에서 HttpResponse
의 인스턴스를 반환하면 뷰가 호출되지 않습니다. HttpResponseForbidden
은 HttpResponse
의 하위 클래스이므로 사용자가 인증되지 않은 경우보기가 호출되지 않습니다.
이 맞춤형 미들웨어를 MIDDLEWARE_CLASSES에 추가해야합니다.
settings.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',
)