我认为标准做法是将成功登录后需要将用户重定向到的URL附加到登录URL的查询字符串的末尾。
您可以将装饰器更改为如下所示(装饰器函数中的冗余也已删除):
def logged_in(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if session.get('logged_in') is not None:
return f(*args, **kwargs)
else:
flash('Please log in first...', 'error')
next_url = get_current_url() # However you do this in Flask
login_url = '%s?next=%s' % (url_for('login'), next_url)
return redirect(login_url)
return decorated_function
您必须用代替某些东西get_current_url()
,因为我不知道Flask中是如何完成的。
然后,在登录处理程序中,当用户成功登录后,您将检查next
请求中是否有参数,如果有,则将其重定向到该URL。否则,您会将它们重定向到某个默认URL(通常/
,我想)。