烧瓶-呼叫一条路线,然后返回第一条路线

时间:2018-07-30 15:00:07

标签: python redirect 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

很显然,这只会使我陷入无尽的循环。有人可以建议实现此目标的正确方法。

1 个答案:

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

Flask-Login — Flask-Login 0.4.1 documentation