Python Flask中如何保持请求在同一路由?POST跳转问题排查
问题原因及修复方案
核心问题
POST请求后跳转到根路由,是因为表单的action="."在部分场景下会被解析为应用根路径,而非当前的/melting2路由。同时代码还有两处细节问题影响功能完整性:
- 成功返回的HTML缺少闭合的
</a>标签 - 错误信息未在表单页面正确渲染
修复后的完整代码
# 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
相关产品推荐
相关产品推荐

