使用 Flask 从 HTML 表单发布对象数组? [复制]

Posted

技术标签:

【中文标题】使用 Flask 从 HTML 表单发布对象数组? [复制]【英文标题】:Post an array of objects from an HTML form using Flask? [duplicate] 【发布时间】:2018-08-27 13:37:30 【问题描述】:

我想生成这个 JSON 对象,其中包含来自表单输入的对象数组:


"network":[
    "layer_type": "conv2d", "num_filters": 16, "kernel_size": 2, "padding": "valid", "stride": 2,
    "layer_type": "max_pool2d", "num_filters": 16, "kernel_size": 2, "padding": "valid", "stride": 2,
    "layer_type": "conv2d", "num_filters": 32, "kernel_size": 3, "padding": "valid", "stride": 2       
  ]

有没有办法使用 Flask 来做到这一点?

更新

表单如下所示:

至于动态生成的html代码的sn-p:

<li>
    <select name="network[][layer_type]"><!-- options here --></select>
    <input type="number" name="network[][num_filters]">
    <!-- other parameters here -->
</li>
<li>
    <select name="network[][layer_type]"><!-- options here --></select>
    <input type="number" name="network[][num_filters]">
    <!-- other parameters here -->
</li>

编辑:由于这个问题被标记为重复,我将添加更多信息。我想在question 中实现类似的目标,但使用 Flask:

"students" => [
  
    "first" => "foo",
     "last" => "bar",
      "age" => "21"
  ,
  
    "first" => "baz",
     "last" => "qux",
      "age" => "19"
  
]

根据接受的答案,它确实可以与 Ruby 一起使用这种形式:

<!-- first student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">

<!-- second student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">

但我想知道如何使用 Flask。

【问题讨论】:

你的意思是要获取json格式的表单数据吗? 是的。我想获取包含 json 格式的对象数组的表单数据。 【参考方案1】:
    您可以使用form.data 以json 格式访问表单数据

例如

考虑如下定义的形式,

class GeneralForm(FlaskForm):
    boolean_val = BooleanField('Boolean')
    a_float = FloatField('Severity')
    submit = SubmitField('Submit')

在应用路由中,

@app.route('/wtforms', methods=['GET', 'POST'])
def debug_wtforms():
    form = GeneralForm()
    if request.method == 'POST' and form.validate_on_submit():
        print(form.data) # Form data as a dict
    return render_template('index1.html', form=form)
    如果您只是直接在html模板中定义了表单,您可以使用request.form.to_dict(flat=False)访问表单数据

我希望这会有所帮助。

【讨论】:

我直接在html模板中定义了form表单。我遵循了您提供的第二个选项,但没有得到我想要的输出。这是我得到的输出:'network[][layer_type]': 'conv2d', 'network[][padding]': 'valid', 'output_layer': 'ctc_decoder', 'network[][kernel_size]': '2', 'loss': 'ctc', 'network[][num_filters]': '16', 'optimizer': 'adam', 'learning_rate': '0.0001', 'network[][stride]': '2', 'architecture_name': 'dummy_model', 'action': '', 'network[][pool_size]': '2', 'metrics': 'label_error_rate' 你能用包含表单的 html 模板来支持你的问题吗? 更新帖子。 不要介意我评论中不包含“network”的其余参数。 这是一个相关问题:***.com/questions/38126371/…

以上是关于使用 Flask 从 HTML 表单发布对象数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将表单数组发送到 Flask

使用 Flask 获取表单数据 [重复]

flask web表单

Flask之模板web表单

如何在Python框架Flask中将图像文件从表单上传到数据库

使用Flask创建注册表单 - AttributeError:'ValueError'对象没有属性'name'