WTForms BooleanField 将 JSON false 值视为 true

WTForms BooleanField treats JSON false value as true

我正在使用 wtforms 来处理来自 post 请求的数据。某个 post 请求发送各种数据,包括布尔值。

我的表单如下所示:

class EditFileForm(Form):
    title = StringField('title')
    shared = BooleanField('shared')
    fileID = IntegerField('fileID')
    userID = IntegerField('userID')

我可以看到,当我收到请求时,数据如下所示:

data = MultiDict(mapping=request.json)
print(data)
>>MultiDict([(u'shared', False), (u'title', u'File5'), (u'userID', 1), (u'fileID', 16)])

您可以看到布尔字段是 "false",打印原始数据也显示了这一点。但是,当我打印实际的表单字段时,我得到了 true。

print(form.shared.raw_data)
[False]
print(form.shared.data)
True

我了解到 WTForms 可能不知道如何处理错误的布尔值。这样做的正确方法是什么?使用 IntegerField 代替?

我有另一个带有布尔字段的表单,它可以很好地处理来自我的 postgres 数据库的假布尔值。

WTForms 并不是真的要处理 JSON 数据。在这种情况下,BooleanField 检查它收到的值是否在 field.false_values 中,默认为 ('false', '')False 对象不在那里,所以它被认为是真实的。

您可以将另一组 false_values 传递给该字段。

BooleanField(false_values={False, 'false', ''})

或者通过将其放置在首次使用该字段之前的某处来为所有实例修补它。

BooleanField.false_values = {False, 'false', ''}

您最好使用 Marshmallow 等序列化库来处理 JSON 数据。