WTForms:基于DB数据的自定义验证器?

时间:2014-06-17 23:23:35

标签: wtforms flask-wtforms

在WTForms中,我可以根据数据库中的数据创建自定义验证器吗?

例如,我想显示一个多选字段,用户只能根据帐户类型(存储在数据库中)选择一定数量的值。

预期的行为是:

  1. 如果提交了表单,请检查选择了多少个值。
  2. 运行数据库查询,获取帐户类型。
  3. 检查#1是否小于或等于#2。
  4. 如果是,请认为它有效。
  5. 这可能吗?

1 个答案:

答案 0 :(得分:2)

你可以编写一个自定义验证器来做你在python中可以做的任何事情:

user = # get user from request context

def account_type_check(form, field):
    account = get_account_for_user(user) # insert your account retrieval logic here

    if len(field.data) > account.user_limit:
        raise ValidationError('Submission exceeded user's account type limit')

class SelectionForm(Form):
    selection = MultiSelectField('Selection', [account_type_check])

值得注意的是,你可以说这是一种用于此类事情的恶意工具。表单验证库的目的是提供验证表单提交的 DRY 方法。这适用于测试字符串的长度,数字在范围内等等。一旦验证方案变得足够复杂,您就会花费更多的时间来使库满足您的需求,而不是自己编写验证。