WTForms BooleanField将JSON false值视为true

Bro*_*sef 6 python json flask wtforms flask-wtforms

我正在使用wtforms我的帖子请求处理数据.一个特定的发布请求发送包括布尔值的各种数据.

我的表单看起来像这样:

class EditFileForm(Form):
    title = StringField('title')
    shared = BooleanField('shared')
    fileID = IntegerField('fileID')
    userID = IntegerField('userID')
Run Code Online (Sandbox Code Playgroud)

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

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

您可以看到布尔字段为"false",并且打印原始数据也显示出来但是,当我打印实际的表单字段时,我得到了真实.

print(form.shared.raw_data)
[False]
print(form.shared.data)
True
Run Code Online (Sandbox Code Playgroud)

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

我有另一个表单,其中booleanfield正在处理来自postgres数据库的错误布尔值.

dav*_*ism 11

WTForms并不真正意味着使用JSON数据.在这种情况下,BooleanField检查它收到的值是否为field.false_values默认值('false', '').该False物体是不是在那里,所以它被认为是真实的.

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

BooleanField(false_values={False, 'false', ''})
Run Code Online (Sandbox Code Playgroud)

或者在第一次使用该字段之前将其放置在某处,为所有实例修补它.

BooleanField.false_values = {False, 'false', ''}
Run Code Online (Sandbox Code Playgroud)

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