首页 > 解决方案 > 为什么我的表单反序列化为 Mutlidict 字符串而不是烧瓶中的整数

问题描述

我从 html 页面发送表单,一些(但不是全部)输入似乎是字符串而不是整数。此表单有 60 多个输入。

我可以手动将每个数字输入转换为我的 dict 中的 int,但我不知道要转换的所有输入名称。

我有一个烧瓶模板

<!doctype html>
<form class="form-inline" method="POST" action="{{ url_for('result') }}">
    <div>
        <p>nb_ref</p>
        <input type="number" name="nb_ref" value=1>
    </div>
    <div>
        <p>type_client</p>
        <input type="text" name="type_client" value="P">
    </div>
    ...more inputs removed for clarity

    <button type="submit" class="btn">Go</button>
</form>

我在这里输出响应

@app.route("/result", methods=['GET', 'POST'])
def result():
    error = None
    select = request.form.to_dict()
    pp(select)

这给了我我的日志

{'SST_si_second_devis': '0',
...more items removed for clarity
 'nb_ref': '1',
 'type_client': 'P'}

我希望有一个输出字典如下

{'SST_si_second_devis': 0,
...more items removed for clarity
 'nb_ref': 1,
 'type_client': 'P'}

编辑:

此处问题的解决方案Cast Flask form value to int需要我事先知道哪个输入实际上是字符串或整数,但事实并非如此

标签: pythonflaskdeserialization

解决方案


如果可能,您可以遍历所有这些并转换为int

for key, val in select.items():
    try:
        select[key] = int(val)
    except ValueError:
        pass

推荐阅读