Flask Flash 消息传递部分有效

问题描述

我已经实现了一个带有登录注册路由的简单 Flask 应用程序,我想在用户名密码不匹配时闪现消息。这是我的索引和登录路径的一部分,

@app.route('/')
@login_required
def index():
    return 'Hello World'

@app.route("/login",methods=["GET","POST"])
def login():

    # Forget any user_id
    session.clear()

    if request.method == "POST":

        # Ensure username was submitted
        if not request.form.get("username"):
            flash("Must provide username")
            return redirect("/login")

        #And so on...

    if request.method == "GET":
        render_template("login.html")

问题是当我提交带有空白输入的表单时,闪现消息没有出现。即便如此,具有相同代码的寄存器路由也没有任何错误地呈现闪存消息,

@app.route("/register","POST"])
def register():

    if request.method == "POST":

        # Ensure username was submitted
        if not request.form.get("username"):
            flash("Must provide username")
            return redirect("/register")
      
        #And so on...

    if request.method == "GET":
            render_template("register.html")

我在我的模板中包含了 Jinja 模板。有人可以指出为什么它仅在登录路径中不起作用吗?

解决方法

您的 LD_LIBRARY_PATH 函数会清除会话,即使 loginrequest.method

GET

因为 Flash 消息存储在会话中,所以在呈现登录表单时,消息已经被删除。

根据 session.clear() 其余部分的样子,您可能只想在 loginrequest.method 时清除会话。