我一直在使用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'))