2013-04-08 4 views
2

모든 들어오는 요청에 대해 호출되는 커스텀 wsgi 미들웨어를 작성하고 싶습니다. URL을 확인하고 사용자가 인증되어 요청이 진행되거나 거부 될 경우 허용합니다.django 용 커스텀 wsgi 미들웨어 정의 방법

django에서 wsgi 미들웨어를 추가하는 가장 좋은 방법은 무엇입니까?

답변

1

왜 WSGI 미들웨어로 이것을 수행 하시겠습니까? Django는 몇 년 전 Django 미들웨어와 WSGI 미들웨어를 조화시키려는 시도가 있었지만 실제로는 아무 것도 얻지 못했습니다.

Django는 very well documented 인 미들웨어 버전을 보유하고 있으며 약 3 줄의 요청을 처리 할 수 ​​있습니다.

1

여기서 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의 인스턴스를 반환하면 뷰가 호출되지 않습니다. HttpResponseForbiddenHttpResponse의 하위 클래스이므로 사용자가 인증되지 않은 경우보기가 호출되지 않습니다.

이 맞춤형 미들웨어를 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', 
)