我查看了文档,但是对于我的生活,我无法弄清楚Flask中的request.form
对象是如何填充的。 The documentation表示它填充了来自POST或PUT请求的已解析表单数据,但我的表单是动态的,因此我不一定知道发送POST请求时存在哪些字段 - 尽管我想确保添加从这些字段到数据库的信息。
表单中的某些字段始终存在,但是大约60个列表中还会有任意数量的额外字段。我应该如何确定请求中的哪些附加字段以及应该如何处理我从他们那里得到了数据?
编辑:我的具体问题已经解决,但仍然值得询问如何填充request.form字典。我发现很难的方法是,如果未选中复选框输入,则不会在其名称下的字典中添加任何键,并且尝试从字典中获取不存在的键的值会导致相当混乱和神秘{{ {1}}错误。
答案 0 :(得分:26)
request.form
会返回MultiDict
个对象。基本上,这意味着对于1个键,您可以拥有多个值。如果您想测试POST表单的样子,请按照以下步骤快速打印
f = request.form
for key in f.keys():
for value in f.getlist(key):
print key,":",value
如果您阅读MultiDict的文档,则说
“MultiDict是一个字典子类,用于处理同一个键的多个值,例如包装器中的解析函数。这是必要的,因为一些HTML表单元素为同一个键传递了多个值键。强>“
http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.MultiDict
答案 1 :(得分:1)
我遇到了同样的问题。我修复了调用ImmutableMultiDict的get方法的问题。
这是我的“ is_delivery”字段名称的代码:
if form_data.get('is_delivery', False) == 'on':
is_delivery = 1
else:
is_delivery = 0