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

Python Flask中redirect(url_for())页面跳转不生效问题求助

Flask redirect(url_for()) 跳转不生效问题解决方案

问题根因

    1. 同一路由/login重复绑定了两个视图函数showLogin和checkLogin,Flask路由规则优先匹配先注册的showLogin,导致后续的checkLogin逻辑完全不会被触发
    1. 先注册的@app.route('/login')未指定methods参数,默认仅支持GET/HEAD/OPTIONS类型的请求,前端提交的POST请求会直接被拦截返回405错误,无法进入跳转逻辑
    1. 前端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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:21:02