Я использовал переменные сеанса с 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'))