gpt4 book ai didi

python - 对于 wtforms.BooleanField,DataRequired 验证器已损坏

转载 作者:行者123 更新时间:2023-12-01 14:38:38 25 4
gpt4 key购买 nike

我正在使用 WTForms(连同 Flask、flask-wtf、sqlalchemy)来验证 REST API 的传入 JSON。我意识到 WTForms 更倾向于 HTML 表单渲染和验证,但我选择它是因为它可以从我的 sqlalchemy 模型中自动生成表单(感谢 wtforms.ext.sqlalchemy)。
无论如何,问题就在这里。我的模型之一包括 bool 字段,它使用 DataRequired 验证器转换为 wtforms.BooleanField。问题是即使我传递了正确的数据,验证也会失败并显示“此字段是必需的”错误消息。我的表格:

class MyForm(Form):
name = TextField('name', validators=[DataRequired()])
disabled = BooleanField('disabled', validators=[DataRequired()])
JSON 数据是这样的:
'{"name": "John", "disabled": "false"}'
我期待的是:
  • {"disabled": "false"} -> 验证成功的强制 Python 数据:{'disabled': False}
  • {"disabled": "true"} -> 验证成功的强制 Python 数据:{'disabled': True}
  • {"disabled": ""}'{"disabled": "foo"}' -> 验证失败

  • 目前在第一种情况下验证失败 {'disabled': [u'This field is required.']}我知道 docs 中有一张便条上面写着 DataRequired验证器“需要强制数据,而不是输入数据”,但是 1) 表单由 wtforms.ext.sqlalchemy 自动生成和 2) 如果我使用 InputRequired 应该如何表现验证器?检查(通过 form.validate() )是否存在某些数据,然后检查这些数据是“真”还是“假”?
    总而言之,我的问题是:
  • 验证wtforms.BooleanField的正确方法是什么? ?
  • 也许还有其他框架可以根据给定的 sqlalchemy 模型验证传入的 JSON?

  • 谢谢。

    最佳答案

    有很多方法可以解决这个问题。您可以编写自己的转换器来使用具有真/假选择的 radio 场,您可以使用数据过滤器,您可以设置一个默认值,但我认为您想要的行为可以通过以下方式实现:

    MyForm = model_form(MyModel, db_session=db, field_args = {
    'disabled' : {
    'false_values': ['false'],
    'validators' : [InputRequired()] }
    })

    编辑:如果您想要更严格的处理程序,您可以执行以下操作:
    class BooleanRequired(object):
    field_flags = ('required', )

    def __init__(self, message=None):
    self.message = message

    def __call__(self, form, field):
    if field.data is None:
    if self.message is None:
    message = field.gettext('This field is required.')
    else:
    message = self.message

    field.errors[:] = []
    raise StopValidation(message)


    class StrictBooleanField(BooleanField):
    def process_formdata(self, valuelist):
    self.data = None
    if valuelist:
    if valuelist[0] == 'false':
    self.data = False
    elif valuelist[0] == 'true':
    self.data = True


    class StrictModelConverter(ModelConverter):
    @converts('Boolean')
    def conv_Boolean(self, field_args, **extra):
    return StrictBooleanField(**field_args)

    MyForm = model_form(MyModel, db_session=db, converter=StrictModelConverter(),
    field_args = { 'disabled' : { 'validators': [BooleanRequired()] }
    })

    关于python - 对于 wtforms.BooleanField,DataRequired 验证器已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23681846/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com