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

Python Flask中如何保持请求在同一路由?POST跳转问题排查

问题原因及修复方案

核心问题

POST请求后跳转到根路由,是因为表单的action="."在部分场景下会被解析为应用根路径,而非当前的/melting2路由。同时代码还有两处细节问题影响功能完整性:

  1. 成功返回的HTML缺少闭合的</a>标签
  2. 错误信息未在表单页面正确渲染

修复后的完整代码

# A very simple Flask Hello World app for you to get started with...
#
from flask import Flask, request

from processing import do_calc_melting2


app = Flask(__name__)
app.config["DEBUG"] = True

@app.route("/melting2", methods=["GET", "POST"])
def add_page_melting():
    errors = ""
    if request.method == "POST":
        number1 = None
        number2 = None
        number3 = None
        try:
            number1 = float(request.form["number1"])
        except:
            errors += "<p>{!r} is not a number.</p>\n".format(request.form["number1"])
        try:
            number2 = float(request.form["number2"])
        except:
            errors += "<p>{!r} is not a number.</p>\n".format(request.form["number2"])
        try:
            number3 = float(request.form["number3"])
        except:
            errors += "<p>{!r} is not a number.</p>\n".format(request.form["number3"])
        if number1 is not None and number2 is not None and number3 is not None:
            result = do_calc_melting2(number1, number2, number3)
            return '''
                <html>
                    <body>
                        <p>The result is {result}</p>
                        <p><a href="/melting2">Click here to calculate again</a></p>
                    </body>
                </html>
            '''.format(result=result)
    return '''
        <html>
            <body>
                {errors}
                <form method="post" action="/melting2">
                    <p><p>Number 1</p><input name="number1" /></p>
                    <p><p>Number 2</p><input name="number2" /></p>
                    <p><p>Number 3</p><input name="number3" /></p>
                    <p><input type="submit" value="Do calculation" /></p>
                </form>
            </body>
        </html>
    '''.format(errors=errors)

关键修改点

  • 将表单的action="."改为action="/melting2",明确指定POST请求的目标路由,消除路径解析歧义
  • 补全成功页面中<a>标签的闭合标签</a>,并添加闭合的<p>标签,保证HTML结构合法性
  • 在表单页面的HTML中添加{errors}占位符,确保错误信息能正常显示给用户
  • 成功返回的HTML中,将format(result)改为format(result=result),避免变量匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:32