Flask提交表单后清除URL参数,避免刷新重复执行逻辑
解决表单提交后刷新结果页重复执行逻辑的问题
问题分析
当前通过JavaScript以GET方式携带参数重定向到结果页,参数会暴露在URL中。刷新结果页时,浏览器会重新发送相同的GET请求,导致后端逻辑重复执行。要实现“必须重新输入表单才能查看新结果”的需求,需要采用POST/重定向/GET(PRG)模式。
解决方案步骤
- 将表单提交方式改为POST,不再通过JS拼接URL重定向
- 后端新增POST路由处理表单提交,执行逻辑后将结果存入会话(Session),再重定向到结果页
- 结果页的GET路由从会话中读取结果,读取后立即清除会话数据,确保刷新时无数据可读取,必须重新提交表单
代码修改示例
前端表单(替换原JS重定向逻辑)
<form action="/submit-form" method="POST"> <input type="number" name="age" id="age" required> <input type="number" name="price" id="price" required> <button type="submit">提交</button> </form>
后端Flask代码修改
首先配置会话密钥(必须设置,否则Session无法使用):
application.secret_key = 'your-secure-secret-key' # 替换为实际的安全密钥
新增POST路由处理表单提交:
from flask import redirect, url_for, session @application.route("/submit-form", methods=["POST"]) def submit_form(): age = request.form.get("age") price = request.form.get("price") # 执行你的业务逻辑(示例为拼接age和price) htmltext = age + price # 将结果存入Session session['result'] = htmltext # 重定向到结果页(GET请求,无参数) return redirect(url_for('get_response'))
修改原结果页路由,从Session读取结果:
@application.route("/results") def get_response(): # 从Session取出结果并立即删除,避免重复使用 result = session.pop('result', None) if not result: # 无结果时重定向回表单页,强制用户重新输入 return redirect(url_for('form_page')) # 替换为你的表单页路由名称 return render_template("results.html", html=str(result))
方案说明
- POST提交表单时,参数不会出现在URL中,避免了刷新时重复提交的问题
- 会话存储结果并在读取后立即清除,确保用户刷新结果页时,若没有新的表单提交,会被强制返回表单页
- 完全符合“必须重新输入表单信息才能查看新结果”的需求
内容的提问来源于stack exchange,提问作者Treg Townsend
相关产品推荐
相关产品推荐

