如何在辅助函数中访问请求

时间:2012-11-09 18:49:49

标签: python flask

假设您想要重定向用户,如果他们没有登录。目前我有这个:

def my_account():
    if "user" not in session or not session["user"]:
        return redirect('/')

    ...

def my_favourites():
    if "user" not in session or not session["user"]:
        return redirect('/')

    ...

但是现在我想重用检查用户是否登录的代码。但这需要session对象。

我不确定我是否可以或应该在辅助函数中明确传递requestsession对象。或者,如果还有另一种更优选的方式?

2 个答案:

答案 0 :(得分:1)

你试过http://packages.python.org/Flask-Login/吗?我相信这是一个能够提供您所需要的内容的软件包。

答案 1 :(得分:1)

如果要编写可重用代码以验证用户是否已登录,建议使用一种方法是在视图函数上使用装饰器。例如,

@login_required
def do_something():
*    pass

然后,您可以在下面定义此装饰器。然后,您可以使用requestsession对象。此外,如果用户尚未登录,则会重定向到登录URL,然后在登录后转发到下一页。

def login_required(f):
*    @wraps(f)
*    def decorated_function(*args, **kwargs):
*        if "user" not in session or not session["user"]:
*            return redirect(url_for('login', next=request.url))
*        return f(*args, **kwargs)
*    return decorated_function