我一直在使用带有烧瓶的会话变量来做一些非常简单的事情,但是我的行为我不太明白。我有一个链接到注销功能的注销按钮,如果当前有用户名,我想从会话中删除用户名。然而,这最终没有任何效果,而且我在找出如何解决这个问题时遇到了很多麻烦
这是应该相关的导入/设置语句,这部分是从课程入门代码中复制的
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)
在 index 函数中,我检查是否设置了用户名并将其传递给模板
@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'))