Flask переменные сеанса возвращаются в предыдущее состояние после перенаправления - PullRequest
0 голосов
/ 16 июня 2020

Я использовал переменные сеанса с flask для некоторых довольно простых вещей, но я получаю поведение, которое я не совсем понимаю. У меня есть кнопка выхода, которая ссылается на функцию выхода, где я хочу удалить имя пользователя из сеанса, если оно в настоящее время есть. Однако это не имеет никакого эффекта, и у меня было много проблем с поиском того, как исправить эту проблему.

Вот операторы импорта / настройки, которые должны быть связаны, эта часть скопирована из уроков стартовый код

from flask_session import Session

app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

В функции индекса я проверяю, задано ли имя пользователя, и передаю его в шаблон

@app.route("/")
def index():
    logged_in = False
    username = None

    if session.get('username') is not None:
        username = session['username']
        logged_in = True
    return render_template("index.html", logged_in=logged_in, username=username)

Выход из системы должен просто удалить имя пользователя из сеанса, если есть - это один, а затем перенаправить на индекс

@app.route("/logout")
def logout():
    if session.get('username') is not None:
        session.pop('username', None)
    return redirect(url_for('index'))

Пытаясь исправить эту проблему, я заметил, что функция выхода из системы работает так, как я хочу, при вызове, влияя на сеанс, но после перенаправления изменения кажутся отмененными / игнорируемыми. Исходя из этого, я предполагаю, что я чего-то не понимаю в функции перенаправления, но я действительно понятия не имею.

Вот функция входа в систему, где имя пользователя устанавливается, если это помогает, спасибо.

@app.route("/login", methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return redirect(url_for('index'))
    else:
        username = request.form.get("username")
        password = request.form.get("password")
        result = (db.execute('SELECT username FROM users where username = :username AND password = :password',
                             {"username": username, "password": password}).fetchone())
        if result is not None:
            session['username'] = username
            return redirect(url_for('library'))
        else:
            return redirect(url_for('index'))
...