You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask框架中redirect()函数失效问题及解决方法

Flask redirect()失效问题解决

核心原因

你代码里的所有redirect()调用都没有使用return返回,Flask视图函数需要返回响应对象才会生效,单纯调用redirect()只会创建响应对象但不会发送给客户端,所以看起来像是失效了。

修复步骤

找到所有调用redirect的地方,加上return:

1. 修复control_signup视图中的redirect

比如原来的代码片段:

if not username_valid(username):
    session["signup_error"] = "Username can only include lowercase letters a–z, uppercase letters A–Z, digits 0–9 or an underscore and must be 4 to 16 characters long."
    redirect("/signup")

修改为:

if not username_valid(username):
    session["signup_error"] = "Username can only include lowercase letters a–z, uppercase letters A–Z, digits 0–9 or an underscore and must be 4 to 16 characters long."
    return redirect("/signup")

把control_signup里所有的redirect("/signup")都改成return redirect("/signup"),包括最后那个带code=302的调用。

2. 修复control_login视图中的redirect

原代码片段:

else:
    session["login_error"] = "Username, E-Mail or password incorrect."
    redirect("/log-in")

修改为:

else:
    session["login_error"] = "Username, E-Mail or password incorrect."
    return redirect("/log-in")

额外优化建议

  • 简化signup视图逻辑:不要拼接HTML,直接把错误信息传给模板渲染,同时用完后清除session避免重复显示:
    @app.route("/signup")
    def signup():
        message = session.pop("signup_error", None)
        return render_template("signup.htm", error_message=message)
    
    然后在signup.htm模板中添加:
    {% if error_message %}
        <p style="color:red;">{{ error_message }}</p>
    {% endif %}
    
  • 完善username_valid函数:当前函数在所有检查通过后没有返回True,会默认返回None导致判断出错,需要在函数末尾添加:
    def username_valid(username: str) -> bool:
        # 原有验证代码...
        return True
    
  • 登录逻辑优化:control_login中默认未初始化session["is_logged_in"],建议先设置默认值:
    session["is_logged_in"] = False
    for user in user_db:
        if user["email" if login_meth == "email" else "username"] == email_or_username and password_check(password, user["password"]):
            session["is_logged_in"] = True
    

内容的提问来源于stack exchange,提问作者Henryk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:05:33