带下划线的表单字段不起作用

时间:2016-06-19 20:35:36

标签: python flask wtforms

我正在使用表单从post请求中获取数据,我注意到了一些我不熟悉的行为。我有两个版本的表单如下所示。唯一的变化是在表单的第二个版本中,我的变量名称中有一个下划线。

class EditTitleForm(Form):
    newTitle = StringField('newTitle')
    currentTitle = StringField('currentTitle')

class EditTitleForm(Form):
    new_title = StringField('newTitle')
    current_title = StringField('currentTitle')

然而,当我尝试print(form.new_title.data)print(form.current_title.data)时,我得到一个空行,但是当我将表单切换到没有下划线的版本时,所有内容都打印出来。这是为什么?

@auth.route('/edit_title', methods=['POST'])
def edit_title():
    data = MultiDict(mapping=request.json)
    print(data)
    form = EditTitleForm(data)
    print(form.newTitle.data)
    print(form.currentTitle.data)

1 个答案:

答案 0 :(得分:0)

字段的名称对应于正在读取的数据中的键。如果更改字段名称,则还需要更改JSON数据中的键。设置标签(字段的第一个参数)不会影响这一点,仅在将字段呈现为HTML时使用。

# if attribute name is new_title
new_title = StringField()

# then data key must be new_title as well
data = {
    "new_title": "Stack Overflow"
}

WTForms 可以使用JSON,但如果您想要更适合的内容,请尝试Marshmallow或其他序列化库。