我想保护python-flask上的页面,只能在这个页面上限制用户。
我正在写这段代码:
def im_seller():
if not g.user.seller_fee_paid:
return redirect(url_for('account.seller_fee'))
return
@account.route('/account/seller/products.html')
@login_required
@im_seller
def seller_products():
脚本无效,请输入此错误:
TypeError: im_seller() takes no arguments (1 given)
我错了吗?谢谢大家。
答案 0 :(得分:1)
装饰者需要一个函数,需要返回一个函数:
from functools import wraps
def require_seller(f):
@wraps(f)
def require_seller_wrapper(*args, **kwargs):
if not g.user.seller_fee_paid:
return redirect(url_for('account.seller_fee'))
return f(*args, **kwargs)
return require_seller_wrapper
您还需要撤消require_seller
和login_required
的顺序,以便确定g.user
已设置:
@account.route('/account/seller/products.html')
@require_seller
@login_required
def seller_products():
return "All the seller's products"
请参阅this answer about decorators了解有关为什么的所有详细信息。
答案 1 :(得分:0)
from functools import wraps
def require_seller(f):
@wraps(f)
def require_seller_wrapper(*args, **kwargs):
if not g.user.seller_fee_paid:
return redirect(url_for('account.seller_fee'))
return f(*args, **kwargs)
return require_seller_wrapper
你应该使用python decorator。Link