在我的应用中,我有一条名为/ main的路由。我还有一条名为/ index的路由,用于检查会话令牌是否已过期。如果有,它将调用/ login。如果不是,则返回到/ main。
这是为了使某人刷新/ main时,它将首先检查其会话状态。
我要在/ main开头执行的操作是调用/ index。然后,在/ index的末尾返回/ main并从中断处继续,而不是重新开始路由。
所以,像这样:
@app.route('/main')
return redirect(url_for('index'))
#Do the /main stuff
@app.route('index')
#Do some stuff
return redirect(url_for('main')) #But don't go back to the start, go back to doing the /main stuff
很显然,这只会使我陷入无尽的循环。有人可以建议实现此目标的正确方法。
答案 0 :(得分:0)
不是您所要求的,但是您是否考虑过在路线外进行检查并在需要时调用它?我已经建立了这样的东西-
class User(object):
def __init__(self, current_user=None, option=None):
self.current_user = current_user
self.option = option
def do_checks(self):
self.current_user = request.remote_user
option_val = request.cookies.get('option')
if option_val is None:
self.option = None
else:
self.option = option_val
@app.route('/route/', methods=['GET'])
def myroute():
user = User()
user.do_checks()
if user.option is None:
return redirect(url_for('login'))
## code..
或者也许考虑为路由设置装饰器(类似于Flask-Login),以将某些路由仅锁定到已被授权的用户:
@app.route('/post')
@login_required
def post():
pass
if not current_user.is_authenticated:
return current_app.login_manager.unauthorized()