python - 如何在 Flask 上使用 ImmutableMultiDict 获取嵌套字典的值?

标签 python flask werkzeug

address_dict = {'address': {'US': 'San Francisco', 'US': 'New York', 'UK': 'London'}}

当通过请求发送上述参数时,如何在 Flask 上使用 request.form 获取地址键中的值?

import requests
url =  'http://example.com'
params = {"address": {"US": "San Francisco", "UK": "London", "CH": "Shanghai"}}
requests.post(url, data=params) 

然后我在 flask.request 的上下文中得到了这个。

ImmutableMultiDict([('address', u'US'), ('address', 'US'), ('address', 'UK')])

如何获取地址中每个键的值?

谢谢。

最佳答案

例如像这样:

from werkzeug.datastructures import ImmutableMultiDict
imd = ImmutableMultiDict([('address', u'US'), ('address', 'US'), ('address', 'UK')])
print imd.getlist('address')

打印:

[u'US', 'US', 'UK']

编辑:

您的 POST 请求已发送 application/x-www-form-urlencoded ,这意味着作为键/值对的组合。它不直接支持嵌套的字典结构。当我尝试你的 curl 请求时,我得到了这个:

ImmutableMultiDict([('address[US]', u'San Francisco'), ('address[US]', u'New York'), ('address[UK]', u'London')])

所以键在这里按字面解释。

并使用 urllib2 我得到了这个结果:

>>> print urllib2.urlopen("http://localhost:5000/post", data=urllib.urlencode(address_dict)).read()
ImmutableMultiDict([('address', u"{'UK': 'London', 'US': 'New York'}")])

此处 urlencode 只是发送内部字典的字符串表示。

最后使用requests:

>>> print requests.post("http://localhost:5000/post", data=address_dict).content
ImmutableMultiDict([('address', u'UK'), ('address', u'US')])

此处数组被展平并消除了重复出现的键。

根本没有明确的方法如何以 urlencoded 的方式发送像您这样的嵌套字典,因此您必须找到另一种解决方案。

关于python - 如何在 Flask 上使用 ImmutableMultiDict 获取嵌套字典的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10682068/

相关文章:

python - 蓝图的蓝图(Flask)

css - Werkzeug - 带有 Twitter Bootstrap css 的模板

python - python 2.7 中需要密码的 SSL 连接

python - 沿 3D 数组轴的矢量化欧几里德距离 - Python

python - Flask(使用 jinja2)可以使用 'windows-1251' 编码渲染模板吗?

python - 你能解释一下 mod_wsgi 和 werkzeug 之间更详细的区别吗? (SOS新手)

python - 如何使 Flask 流式传输具有 HTTP 206 部分内容的静态文件?

python - 将不同长度的字典映射在一起以实现一致的格式

python - 如何在 Python 中使用 selenium webdriver 获取元素的 CSS 值(例如颜色)

python-2.7 - Flask-Restful 支持的 API 返回 404 错误