1

我一直在使用带有烧瓶的会话变量来做一些非常简单的事情,但是我的行为我不太明白。我有一个链接到注销功能的注销按钮,如果当前有用户名,我想从会话中删除用户名。然而,这最终没有任何效果,而且我在找出如何解决这个问题时遇到了很多麻烦

这是应该相关的导入/设置语句,这部分是从课程入门代码中复制的

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'))
4

0 回答 0