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

如何向同一Flask页面提交多个表单并区分表单来源?

区分多表单提交的两种实用方案

这是个很常见的场景,我给你两种简单靠谱的解决方案,都能轻松区分不同表单的提交请求:

方法一:给每个表单添加隐藏标识字段

在每个表单里加一个隐藏的input字段,给它设置唯一的标识值,后端通过这个值判断请求来自哪个表单。

前端表单代码示例

<!-- 项目表单 -->
<form method="POST" action="/your-handle-url">
  <!-- 隐藏标识,每个表单的value唯一 -->
  <input type="hidden" name="form_identifier" value="project_submit">
  
  <label>项目名称:</label>
  <input type="text" name="project_name">
  <button type="submit">提交项目</button>
</form>

<!-- 另一个表单,比如任务表单 -->
<form method="POST" action="/your-handle-url">
  <input type="hidden" name="form_identifier" value="task_submit">
  
  <label>任务名称:</label>
  <input type="text" name="task_name">
  <button type="submit">提交任务</button>
</form>

后端处理代码示例(以Flask为例)

if request.method == 'POST':
    # 获取表单标识,用get()避免字段不存在时抛出KeyError
    form_id = request.form.get('form_identifier')
    
    if form_id == 'project_submit':
        # 处理项目表单的逻辑
        project = request.form['project_name']
        # 这里写你的项目处理代码...
        print(f"处理项目:{project}")
    elif form_id == 'task_submit':
        # 处理任务表单的逻辑
        task = request.form['task_name']
        # 这里写你的任务处理代码...
        print(f"处理任务:{task}")
    else:
        # 处理未知表单的情况(可选)
        print("未知的表单提交")

方法二:给提交按钮设置唯一的name/value

利用提交按钮的特性:当用户点击某个按钮提交表单时,该按钮的name和value会被一同提交到后端,我们可以通过这个来区分表单。

前端表单代码示例

<!-- 项目表单 -->
<form method="POST" action="/your-handle-url">
  <label>项目名称:</label>
  <input type="text" name="project_name">
  <!-- 提交按钮设置唯一的value -->
  <button type="submit" name="submit_type" value="save_project">保存项目</button>
</form>

<!-- 任务表单 -->
<form method="POST" action="/your-handle-url">
  <label>任务名称:</label>
  <input type="text" name="task_name">
  <button type="submit" name="submit_type" value="save_task">保存任务</button>
</form>

后端处理代码示例

if request.method == 'POST':
    submit_type = request.form.get('submit_type')
    
    if submit_type == 'save_project':
        project = request.form['project_name']
        # 处理项目逻辑...
    elif submit_type == 'save_task':
        task = request.form['task_name']
        # 处理任务逻辑...

小提示

推荐使用request.form.get('字段名')而不是直接request.form['字段名'],因为如果字段不存在(比如用户手动提交非法请求),前者会返回None,而后者会抛出KeyError异常,让你的代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:57