2016-10-25 11 views
0

は、私はDjangoのデコレータのコードをコピーして、自分の目的右ジャンゴデコレータ

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)を変更するので、同じ名前を持っているように見えます、属性、およびそれがラップ機能としてドキュメント。これは、Pythonインタプリタでhelp()を使用するときに役立ち、スタックトレースをより明確にします。

:明確な説明のための

+0

おかげで(注同じことが、基本的STDLIBに含まfunctools.wrapsデコレータによって行われます。)。 –