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

Flask使用request.form获取表单数据报BadRequestKeyError如何解决?

错误原因

你触发报错的核心原因是HTML模板的表单结构错误:你将3个输入字段、1个提交按钮拆分到了4个互相独立的<form>标签中。浏览器提交表单时,只会传递当前提交按钮所属<form>标签内部的字段值,你点击最下方的提交按钮时,发送的POST请求只包含该空表单的内容,不存在flavor、size、crust三个字段,因此后端尝试读取不存在的key时触发BadRequestKeyError。


修复方案

把所有输入字段和提交按钮整合到同一个<form>标签内即可,修改后的模板代码如下:

{% extends 'base.html' %}

{% block head %}
<title>Task Master</title>
{% endblock %}

{% block body %}
<div class="content">
    <h1 >Pizza Master</h1>
    <!-- 所有表单元素都放在同一个form标签下 -->
    <form action="/" method="POST">
        <table class="center">
            <tr>
                <th>Sabor</th>
                <th>Tamanho</th>
                <th>Borda</th>
            </tr>
            <tr>
                <td>
                    <input type="text" name="flavor" id="flavor" required>
                </td>
                <td>
                    <input type="text" name="size" id="size" required>
                </td>
                <td>
                    <input type="text" name="crust" id="crust" required>
                </td>
            </tr>
        </table>
        <br>
        <input type="submit" value="Pedir pizza">
    </form>
</div>
{% endblock %}

额外优化提示

  1. 你当前Order模型中给crust、flavor、size三个字段都加了unique=True约束,这意味着相同饼底/口味/尺寸的订单只能存一条,后续提交相同属性的订单会触发数据库唯一约束错误,如果你允许多个订单选同一种口味/尺寸/饼底,建议删除这三个字段的unique参数。
  2. 调试表单类问题时,可以在后端POST逻辑最开头加print(request.form),查看实际提交的所有字段键值对,能快速定位字段缺失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:05