Flask - Вызовите маршрут и вернитесь к первому маршруту.

1

В моем приложении у меня есть маршрут под названием /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

Очевидно, это приведет меня в бесконечный цикл. Может кто-то предложить правильный метод для достижения этого.

  • 0
    Взгляните на эту флягу-login.readthedocs.io/en/latest
  • 0
    Я использую Hive API. Я посылаю ему JSON для входа в систему, и это дает мне токен. Я отправляю токен, если хочу сделать что-то вроде включения света. Я храню токен в переменной сеанса, чтобы я мог передать его от маршрута к маршруту. Итак, мой / индексный маршрут проверяет, существует ли переменная сеанса. Если нет, он идет в / логин маршрут. Если да, он отправляет быстрый запрос, чтобы проверить, является ли токен действительным, путем поиска ошибок в ответе. Если ошибка -> / логин. Если нет ошибки -> /main. Я думаю, что есть разница между тем, что я делаю, и созданием чего-либо для аутентификации пользователей в моем приложении.
Теги:
flask
redirect

1 ответ

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 - флеш-логин 0.4.1 документация

Ещё вопросы

Сообщество Overcoder
Наверх
Меню