2016-10-25 3 views
0

내가 장고 장식의 코드를 복사하고, 변경을 내 목적을 위해오른쪽 장고가 장식

def valid_token_required(function=None): 

    def _dec(view_func): 
     def _view(request, *args, **kwargs): 
      if 'token' in request.session: 
       try: 
        conn = server.GetTokenCon(request.session['token']) 
        if conn.get_api_status().status == 'good': 
         kwargs['Connection'] = conn 
         return view_func(request, *args, **kwargs) 
       except RateLimitExceededException as e: 
        return HttpResponseForbidden('token_limit') 
       except BadCredentialsException as e: 
        return HttpResponseForbidden('badkey') 
      return HttpResponseForbidden('require_token') 

     _view.__name__ = view_func.__name__ 
     _view.__dict__ = view_func.__dict__ 
     _view.__doc__ = view_func.__doc__ 

     return _view 

    if function is None: 
     return _dec 
    else: 
     return _dec(function) 

모두 OK,하지만 난이 라인의 의미를 이해할 수 없다, 나는 그들을 제거하려하고 코드는 계속 작동합니다. 누군가이 라인의 의미를 설명 할 수 있습니까?

_view.__name__ = view_func.__name__ 
_view.__dict__ = view_func.__dict__ 
_view.__doc__ = view_func.__doc__ 

답변

1

가 감싸는 함수로 그것은 가장 안쪽 기능 (_view를) 변경 때문에이 같은 이름을 가지고 나타납니다, 속성, 문서. 이것은 파이썬 인터프리터에서 help()을 사용할 때 도움이되며 스택 추적을보다 명확하게 만듭니다.

: 명확한 설명을 위해

+0

감사합니다 (주 같은 일이 기본적으로 다음 stdlib에 포함 된 functools.wraps 장식하여 수행됩니다.). –