带下划线的表单域不起作用

Form field with underscore doesn't work

我正在使用表单从 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)

字段的名称与正在读取的数据中的键相对应。如果更改字段名称,则还需要更改 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 或其他序列化库。