我正在使用Flask和wtforms-json构建一个简单的JSON API。我有一个问题,即允许字段为None,即使它们确实不应该是,例如:
wtforms.BooleanField('state', validators=[validators.Optional(), validators.AnyOf([True, False])])
仍然以某种方式通过显式的None(或null)值而不是验证失败或从表单的patch_data()中删除字段(尽管None有时应该是有效的)。与字符串字段相同,设置默认值也没有帮助。
我写了small test script来说明问题。将名称设置为''导致它在补丁数据中为None,而不是像第二个接受的变量那样丢失。
json {}
errors {}
form.data {'name': None, 'potato': None}
form.patch_data {}
json {'name': ''}
errors {}
form.data {'name': None, 'potato': None}
form.patch_data {'name': None}
json {'name': 'a'}
errors {'name': ['Field must be between 2 and 128 characters long.']}
form.data {'name': 'a', 'potato': None}
form.patch_data {'name': 'a'}
json {'name': 'ab'}
errors {}
form.data {'name': 'ab', 'potato': None}
form.patch_data {'name': 'ab'}
json {'potato': None}
errors {}
form.data {'name': None, 'potato': None}
form.patch_data {'potato': None}
json {'potato': ''}
errors {}
form.data {'name': None, 'potato': None}
form.patch_data {'potato': None}
json {'potato': 'minimum'}
errors {'potato': ['Invalid value, must be one of: maximum.']}
form.data {'name': None, 'potato': 'minimum'}
form.patch_data {'potato': 'minimum'}
json {'potato': 'maximum'}
errors {}
form.data {'name': None, 'potato': 'maximum'}
form.patch_data {'potato': 'maximum'}