【问题标题】:How to convert FORM response data to Python dictionary in Flask?如何将 FORM 响应数据转换为 Flask 中的 Python 字典?
【发布时间】:2020-08-02 10:25:41
【问题描述】:

我有以下 POST 格式的数据

标头:Content-Type: 'application/x-www-form-urlencoded':

数据:'field1=true&field2=false&field3=123'

在烧瓶服务器中,使用response.form,产生以下结果:

ImmutableMultiDict([('field1', 'true'), ('field2', 'false'), ('field3', '123')])

做完之后: request.form.to_dict()

结果是: {'field1': 'true', 'field2': 'false', 'field3': '123'}

有没有办法将 JSON 布尔值 true/false 转换为 Python 布尔值 True/False? to_dict 函数不应该将这些转换为 python 布尔类型吗?

字典被转换,但真/假仍然是一个字符串。

除了使用字符串比较之外,实现此目的的最佳方法是什么?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    您必须marshal 数据,即参考 - https://flask-restful.readthedocs.io/en/latest/api.html

    In [11]: from flask_restful import fields, marshal
    
    In [12]: data = {'field1': 'true', 'field2': 'false', 'field3': '123'}
    
    In [13]: mfields = { 'field1':fields.Boolean, 'field2':fields.Boolean, 'field3':fields.Raw}
    
    In [14]: marshal(data, mfields)
    Out[14]: OrderedDict([('field1', True), ('field2', True), ('field3', '123')])
    
    In [17]: dict(marshal(data, mfields))
    Out[17]: {'field1': True, 'field2': True, 'field3': '123'}
    
    

    使用Marshmallow等序列化库来处理表单数据。

    编辑: 如果您事先不知道表单结构,则必须手动转换它,因为true 在这里是一个字符串。如果不是,则可以使用json.loads

    In [18]: data
    Out[18]: {'field1': 'true', 'field2': 'false', 'field3': '123'}
    
    In [19]: {k: True if v == "true" else False if v == "false" else v for k,v in data.items()}
    Out[19]: {'field1': True, 'field2': False, 'field3': '123'}
    

    【讨论】:

    • marshal 工作正常,只要我知道需要哪些字段,但是对于事先不知道数据类型的字段可以做什么?
    • 感谢您的快速回复!正如我在问题的最后一句中提到的,我想在没有字符串比较的情况下进行。
    • @Romit 我已经提供了为什么在我的回答中没有字符串比较就无法完成
    猜你喜欢
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多