3

假设您想重定向未登录的用户。目前我有这个:

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对象。

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

4

2 回答 2

1

你试过http://packages.python.org/Flask-Login/吗?我相信这是一个可以更轻松地提供您正在寻找的东西的软件包。

于 2012-11-09T19:04:44.780 回答
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
于 2012-11-09T19:57:57.100 回答