gpt4 book ai didi

python - 获取 admin_only 装饰器的重定向循环

转载 作者:行者123 更新时间:2023-12-01 06:20:04 26 4
gpt4 key购买 nike

我制作了这个装饰器,这会导致无限重定向循环。

问题是这样的:

args[0].redirect(users.create_login_url(args[0].request.path))

这似乎是一个完全有效的 URL。那么为什么它不能正确重定向呢?

def admin_only(handler, *args):

def redirect_to_login(*args, **kwargs):
return args[0].redirect(users.create_login_url(args[0].request.path))

user = users.get_current_user()
if user:
if authorized(user):
return handler(args[0])
else:
logging.warning('An unauthorized user has attempted to enter an authorized page')
return redirect_to_login
else:
return redirect_to_login

最佳答案

您似乎没有正确定义装饰器。

每次用装饰器包装函数时,装饰器仅被调用一次;从那时起,装饰器返回的函数将被调用。看来您(错误地)相信装饰器函数本身每次都会被调用。

尝试这样的事情:

def redirect_to_login(*args, **kwargs):
return args[0].redirect(users.create_login_url(args[0].request.path))

def admin_only(handler):
def wrapped_handler(*args, **kwargs):
user = users.get_current_user()
if user:
if authorized(user):
return handler(args[0])
else:
logging.warning('An unauthorized user has attempted '
'to enter an authorized page')
return redirect_to_login(*args, **kwargs)
else:
return redirect_to_login(*args, **kwargs)

return wrapped_handler

请注意,在上面的代码中,装饰器只是定义了一个新函数并返回它,这个新函数本身会进行相关检查。

关于python - 获取 admin_only 装饰器的重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/333487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com