Python Flask中redirect(url_for())页面跳转不生效问题求助
Flask redirect(url_for()) 跳转不生效问题解决方案
问题根因
- 同一路由
/login重复绑定了两个视图函数showLogin和checkLogin,Flask路由规则优先匹配先注册的showLogin,导致后续的checkLogin逻辑完全不会被触发
- 同一路由
- 先注册的
@app.route('/login')未指定methods参数,默认仅支持GET/HEAD/OPTIONS类型的请求,前端提交的POST请求会直接被拦截返回405错误,无法进入跳转逻辑
- 先注册的
- 前端
form标签未指定method="POST",表单默认发送GET请求,就算路由配置正确也无法进入POST分支执行跳转
- 前端
修复步骤
1. 合并重复路由逻辑,修改main.py代码
将登录页展示和登录校验逻辑合并到同一个视图函数即可,删除重复的路由绑定:
from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/login', methods=['POST', 'GET']) def login(): if request.method == "POST": # 无需额外校验,直接跳转home页面 return redirect(url_for('home')) # GET请求返回登录页 return render_template('login.html') @app.route('/home') def home(): return render_template('home.html') if __name__ == '__main__': app.run(debug=True)
2. 修改login.html的表单配置
给form标签显式指定提交方法和提交地址,同时补全按钮的闭合内容避免浏览器兼容问题:
<form class='login-form' method="POST" action="{{ url_for('login') }}"> <input type='text' name='inputText' id='inputText'> <button type='submit' name='btnLogin' id='btnLogin'>登录</button> </form>
修改完成后重启服务即可实现点击提交按钮跳转home页面的需求。
内容的提问来源于stack exchange,提问作者sailormoonbs
相关产品推荐
相关产品推荐

