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
相关产品推荐
相关产品推荐

