В моем приложении у меня есть маршрут под названием /main. У меня также есть маршрут под названием /index, который проверяет, истек ли токен сеанса. Если он есть, он вызывает /login. Если нет, он возвращается к /main.
Это значит, что если кто-то обновится/основной, он сначала проверяет состояние сеанса.
То, что я хотел бы сделать в начале/главной, - это call/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()