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

标签 wtforms flask-wtforms

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

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

预期的行为是这样的:

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

这可能吗?

最佳答案

您可以编写自定义验证器来执行您在 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 方法来验证表单提交。这对于测试字符串的长度、数字是否在范围内等非常有效。一旦验证场景变得足够复杂,您将花费更多的时间来尝试使库满足您的需求,而不是自己编写验证。

关于WTForms:基于数据库数据的自定义验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274855/

相关文章:

python-3.x - WTF Forms Flask中的字段验证,重定向方法

python - 使用 Flask-Principal 角色填​​充 WTForm MultiCheckboxField

python - 使用 WTForms-Alchemy 进行 CSRF 保护

python - 条件 Flask-WTF 表单字段

python - Flask SQLAlchemy 中的表单删除方法不起作用

wtforms - 在 wtForms 中创建自定义字段

javascript - AJAX 不发布多字段表单

python - 初始化要在 SelectField 中使用的 Flask WTFForm 类变量

python - 如何在 Flask Peewee 中使用更新查询?