重定向后烧瓶会话变量恢复到先前的状态

时间:2020-06-16 05:27:13

标签: session flask session-variables flask-session

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

0 个答案:

没有答案
相关问题