aus*_*nce 1 python flask python-3.x flask-login
我正在尝试从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
Run Code Online (Sandbox Code Playgroud)
来源:
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
Run Code Online (Sandbox Code Playgroud)
请原谅复制/粘贴的不良缩进.
问题:当我使用我的函数进行换行时,它无法获得第一个参数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'
Run Code Online (Sandbox Code Playgroud)
必须有一些小事,我不是那么聪明.谢谢你的时间.
pok*_*oke 10
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4148 次 |
| 最近记录: |