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 %}
额外优化提示
- 你当前Order模型中给
crust、flavor、size三个字段都加了unique=True约束,这意味着相同饼底/口味/尺寸的订单只能存一条,后续提交相同属性的订单会触发数据库唯一约束错误,如果你允许多个订单选同一种口味/尺寸/饼底,建议删除这三个字段的unique参数。 - 调试表单类问题时,可以在后端POST逻辑最开头加
print(request.form),查看实际提交的所有字段键值对,能快速定位字段缺失问题。
内容的提问来源于stack exchange,提问作者vapdev
相关产品推荐
相关产品推荐

