gpt4 book ai didi

python - Python 3.4 中的包装函数缺少必需的位置参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:37 24 4
gpt4 key购买 nike

我正在尝试从 Flask-Login 包中自定义一个 login_required 装饰器。我已经阅读了源代码并模仿了语法。

我的:

def login_role_required(f, req_roles=['any']):
@wraps(f)
def decorated_view(*args, **kwargs):
if current_app.login_manager._login_disabled:
return f(*args, **kwargs)
if not current_user.is_authenticated():
return current_app.login_manager.unauthorized()

if req_roles == ['any']:
return f(*args, **kwargs)
user_roles = current_user.get_roles

# Check to make sure all required roles are had by user
for r in req_roles:
if r not in user_roles:
current_app.login_manager.unauthorized()
return f(*args, **kwargs)
return decorated_view

来源:

def login_required(func):
@wraps(func)
def decorated_view(*args, **kwargs):
if current_app.login_manager._login_disabled:
return func(*args, **kwargs)
elif not current_user.is_authenticated():
return current_app.login_manager.unauthorized()
return func(*args, **kwargs)
return decorated_view

请原谅复制/粘贴的错误缩进。

问题:当我使用我的函数进行换行时,它无法获取第一个参数 f(函数)。

@app.route('/shutdown', methods=['POST'])
@login_role_required(req_roles=['admin'])
def shutdown_server():
pass

TypeError: login_role_required() missing 1 required positional argument: 'f'

肯定有一些小事我做的不太聪明。谢谢你的时间。

最佳答案

login_role_required 应该是一个返回装饰函数的函数,装饰函数又接受一个参数——装饰函数——并返回修改后的函数。所以它应该是这样的:

def login_role_required(req_roles = None):
if req_roles is None:
req_roles = ['any']

def decorator (f):
def decorated_view(*args, **kwargs):
# …
return f(*args, **kwargs)
return decorated_view

return decorator

关于python - Python 3.4 中的包装函数缺少必需的位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853438/

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