python - Flask - 调用路线并返回第一条路线
问题描述
在我的应用程序中,我有一个名为 /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
显然,这只会让我陷入无限循环。有人可以提出适当的方法来实现这一目标。
解决方案
不完全符合您的要求,但您是否考虑过在路线之外完成检查并在路线中需要时调用它?像这样的东西是我设置的——
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()