python flask保护用户页面

时间:2015-10-26 20:44:58

标签: python flask

我想保护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)
我错了吗?谢谢大家。

2 个答案:

答案 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_sellerlogin_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