2016-07-22 2 views
1

내 REST API를 실행 사용자 정의 장식 :장고 : 장고 - 나머지 프레임 워크 인증 클래스 전에

class FileView(APIView): 
    parser_classes = (MultiPartParser,) 
    authentication_classes = (BasicAuthentication,) 
    permission_classes = (IsAuthenticated,) 

@method_decorator(csrf_exempt) 
@method_decorator(operation_logger) 
def dispatch(self, request, *args, **kwargs): 
    return super(FileView, self).dispatch(request, *args, **kwargs) 

def post(self, request): 
    print "xxxxpost" 

사용자 정의 된 데코레이터 :

def operation_logger(view_func): 
    @wraps(view_func) 
    def wrapper(request, *args, **kwargs): 
     print "xxxx" 
     comments = [] 
     psfile = None 
     op = None 
     remote_addr = request.META.get('REMOTE_ADDR') 
     if request.user: 
      user = request.user 
      print request.user.username 
     else: 
      print "request.user is None" 

     return view_func(request, *args, **kwargs) 

    return wrapper 

이 인증이 완료되기 전에 내 장식이 실행 것으로 보인다. 그것을 고치는 방법? 감사합니다.

업데이트 아래에 내 미들웨어 목록을 추가했습니다. 그러나 내가 djangorestframework를 사용하는 API를위한 새로운 애플리케이션을 만들었 기 때문에 관련이 있는지 확신 할 수 없습니다.

MIDDLEWARE_CLASSES = (
    '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', 
    'lib.middleware.SessionTimeout', 
    'lib.middleware.ForceTemporaryPasswordChange' 
) 
+0

미들웨어 주문이란 무엇입니까? http://simpleisbetterthancomplex.com/tutorial/2016/07/18/how-to-create-a-custom-django-middleware.html – Lucas03

답변

0

데코레이터가 적용된 순서를 변경할 수 있습니다. def 행에 가장 가까운 것이 먼저 실행됩니다.

@method_decorator(operation_logger) 
@method_decorator(csrf_exempt) 
def dispatch(self, request, *args, **kwargs): 
    return super(FileView, self).dispatch(request, *args, **kwargs) 
+0

감사. 노력했지만 작동하지 않았습니다. – BAE

관련 문제