如何在python / flask中访问此ImmutableMultiDict中的键值?

时间:2019-08-13 20:39:42

标签: python dictionary flask

根据我的axios POST请求。我从ImmutableMultiDict得到了一个request.form的烧瓶。

字典看起来像这样:

ImmutableMultiDict([('{"values":{"firm":"","infosys":"","spot":""}}', u'')])

我可以使用to_dict()转换为常规词典,它看起来像这样:

{'{"values":{"firm":"","infosys":"","spot":""}}': u''}

如何获取'firm','infosys'和'spot'键的值?

  useEffect(() => {
    console.log(values);
    const postData = async () => {
      const data = JSON.stringify({values: values})
      const result = await axios.post('http://127.0.0.1:5000/form/', data)
      console.log(result);
    };
    postData()
  }, [values]);

2 个答案:

答案 0 :(得分:3)

您得到一个JSON对象,您需要先对其进行转换。

import json
v = {}
x = {'{"values":{"firm":"","infosys":"","spot":""}}': u''}
for key in x:
    v = json.loads(key)

print v['values']['firm']
print v['values']['infosys']
print v['values']['spot']
print type(v)

答案 1 :(得分:0)

您应该将数据结构从axios更改为仅反映表单内容:

const data = JSON.stringify(values)

然后Flask应该给您一个ImmutableMultiDict,如下所示:

ImmutableMultiDict([('firm', u''), ('infosys', u''), ('spot', u'')])

然后您可以使用以下命令将其转换为有效的JSON

imd.to_dict()  # `imd` variable holds your ImmutableMultiDict

您将获得:

{
    'firm': '',
    'infosys': '',
    'spot': ''
}

如果您希望值包含列表,则可以在对flat的调用中将False设置为to_dict

imd.to_dict(flat=False)

那么您将得到:

{
    'firm': [''],
    'infosys': [''],
    'spot': ['']
}