我写了一个登录装饰器,应该保证用户在执行另一个功能之前已正确登录。问题是,虽然装饰器按预期工作,但函数包装函数永远不会执行。我的结构如下:
#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
我已经尝试在装饰器中删除返回True / False,但它没有改变任何东西。
答案 0 :(得分: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
,但这不是装饰器的工作方式。他们用装饰器返回的任何东西替换原始函数;如果你返回一个新函数,那个新函数负责调用原始函数(如果需要),没有其他人会为你做这个。