2017-04-18 3 views
0

다른 데모를 실행하기 전에 로그인 데코레이터를 작성 했으므로 사용자가 제대로 로그인했는지 확인해야합니다. 문제는 데코레이터가 예상대로 작동하지만 함수 랩핑 된 함수가 결코 실행되지 않는다는 것입니다. 내 구조는 다음과 같다 : 데코레이터가 래핑 된 함수를 호출하지 않음

#This is my decorator 
login_required(func): 
    def func_wrapper(*args, **kwargs): 
     #do some operations 
     return True #or False 
    return func_wrapper 

@login_required 
def do_something(param1, param2, param3): 
    print("This print is not executing") 
    #continue the work that should be done after 
    #the user is authorized by the login decorator 

나는 이미 장식 내부는 false 반환을/제거하려하지만 아무것도 변경하지 않았다.

답변

3

래퍼 함수는 func을 호출하지 않습니다. 랩퍼가 호출 될 때 func가 호출 할 경우,

def login_required(func): 
    def func_wrapper(*args, **kwargs): 
     #do some operations to determine if user logged in and allowed to do op 
     if allowed: 
      return func(*args, **kwargs) 
     else: 
      # Raise exception, return "auth required" sentinel value, whatever 
    return func_wrapper 

귀하의 코드는 부울을 반환하는 것은 어떻게 든 랩 func가 호출됩니다 여부를 결정한다고 가정한다 : 예컨대, 호출,하지만 장식이 작동하지 방법입니다. 그들은 원래 함수를 데코레이터가 반환하는 것으로 바꾸십시오. 새 함수를 반환하면 원래 함수를 호출하는 새 함수가 필요합니다 (원하는 경우). 아무도 다른 함수를 호출하지 않습니다.

+0

오, 그건 그냥 바보 같았습니다. 나는 결코 함수 func를 호출하지 않았으므로 분명히 호출되지 않았다. 고마워요! – Depa

관련 문제