在 ImmutableMultiDict 中访问动态输入名称

Access dynamic input name in ImmutableMultiDict

我从 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

也许这会有所帮助。通常我不使用 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

请注意需要循环,因为字典是无序的,因此您永远不知道字典中键的存储顺序。

这种方式适合我:

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