在ImmutableMultiDict中访问动态输入名称

时间:2015-02-03 01:33:08

标签: python wtforms flask-wtforms

我来自wtforms:

ImmutableMultiDict([('csrf_token', u'1422930083.22##139a472d31a0bbb37c25fee616b8b5bd5a38e37a'), ('27', u'y'), ('type', u'job')])

我能做到

print request.form.getlist('type')

获取类型值。但27怎么样?名称可以更改,因此另一种形式可以是25

如何访问该输入字段? ImmutableMultiDict可以转换吗?我无法在ImmutableMultiDict

中弹出任何元素
TypeError: 'ImmutableMultiDict' objects are immutable

2 个答案:

答案 0 :(得分:1)

这种方式适合我:

data_form = {}

for fieldname, value in request.form.items():
    data_form[fieldname] = value

data_form.pop("csrf_token", None)
data_form.pop("type", None)

print data_form

答案 1 :(得分:0)

也许这会有所帮助。通常我不使用ImmutableMultiDict,所以也许有更好的方法。但假设dict总是有3个元素,其中两个是'csrf_token'和'type',你可以获得第三个未知密钥的名称,如下所示:

from  werkzeug.datastructures import ImmutableMultiDict

imd = ImmutableMultiDict([('csrf_token', u'1422930083.22##139a472d31a0bbb37c25fee616b8b5bd5a38e37a'), 
                          ('27', u'y'), 
                          ('type', u'job')])

for k in imd:
    if k not in ['csrf_token','type']:
        last_key = k
        print(last_key)
        break

print(imd[last_key])

结果是:

27
y

请注意,需要循环,因为dicts是无序的,所以你永远不知道dict中的键的存储顺序。