首页 > 解决方案 > 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

显然,这只会让我陷入无限循环。有人可以提出适当的方法来实现这一目标。

标签: pythonredirectflask

解决方案


不完全符合您的要求,但您是否考虑过在路线之外完成检查并在路线中需要时调用它?像这样的东西是我设置的——

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()

Flask-Login — Flask-Login 0.4.1 文档


推荐阅读