我正在使用表单从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)
答案 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或其他序列化库。