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

Flask提交表单后清除URL参数,避免刷新重复执行逻辑

解决表单提交后刷新结果页重复执行逻辑的问题

问题分析

当前通过JavaScript以GET方式携带参数重定向到结果页,参数会暴露在URL中。刷新结果页时,浏览器会重新发送相同的GET请求,导致后端逻辑重复执行。要实现“必须重新输入表单才能查看新结果”的需求,需要采用POST/重定向/GET(PRG)模式。

解决方案步骤

  1. 将表单提交方式改为POST,不再通过JS拼接URL重定向
  2. 后端新增POST路由处理表单提交,执行逻辑后将结果存入会话(Session),再重定向到结果页
  3. 结果页的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:27:18