验证器

验证器是模型字段的可调用项,它接受一个值,如果该值不满足某些条件,则会引发 ValidationError

用法

您可以将验证器列表传递给 Field 参数 validators

class ValidatorModel(Model):
    regex = fields.CharField(max_length=100, null=True, validators=[RegexValidator("abc.+", re.I)])

# oh no, this will raise ValidationError!
await ValidatorModel.create(regex="ccc")
# this is great!
await ValidatorModel.create(regex="abcd")

内置验证器

以下是内置验证器列表

class tortoise.validators.CommaSeparatedIntegerListValidator(allow_negative=False)[source]

验证器,用于验证给定值是否为有效的逗号分隔整数列表。

class tortoise.validators.MaxLengthValidator(max_length)[source]

验证器,用于验证给定值的长度是否大于 max_length。

class tortoise.validators.MaxValueValidator(max_value)[source]

FloatField、IntField、SmallIntField、BigIntField 的最大值验证器

tortoise.validators.MinLengthValidator(min_length)[源代码]

一个验证器,用于验证给定值长度是否小于 min_length。

tortoise.validators.MinValueValidator(min_value)[源代码]

FloatField、IntField、SmallIntField、BigIntField 的最小值验证器

tortoise.validators.RegexValidator(pattern, flags)[源代码]

一个验证器,用于验证给定值是否与正则表达式匹配。

tortoise.validators.Validator[源代码]
抽象 __call__(value)[源代码]

所有特定验证器都应实现此方法。

参数:
value

要验证的给定值。

引发:

ValidationError – 如果验证失败。

tortoise.validators.validate_ipv46_address(value)[源代码]

一个验证器,用于验证给定值是否为有效的 IPv4Address 或 IPv6Address。

引发:

ValidationError – 如果值是无效的 IPv4Address 或 IPv6Address。

tortoise.validators.validate_ipv4_address(value)[source]

一个验证器,用于验证给定值是否为有效的 IPv4Address。

引发:

ValidationError – 如果值是无效的 IPv4Address。

tortoise.validators.validate_ipv6_address(value)[source]

一个验证器,用于验证给定值是否为有效的 IPv6Address。

引发:

ValidationError – 如果值是无效的 IPv6Address。

自定义验证器

有两种方法可以编写自定义验证器,一种是通过传递给定值来编写函数,另一种是继承 tortoise.validators.Validator 并实现 __call__

以下是一个编写自定义验证器的示例,用于验证给定值是否为偶数

from tortoise.validators import Validator
from tortoise.exceptions import ValidationError

class EvenNumberValidator(Validator):
    """
    A validator to validate whether the given value is an even number or not.
    """
    def __call__(self, value: int):
        if value % 2 != 0:
            raise ValidationError(f"Value '{value}' is not an even number")

# or use function instead of class
def validate_even_number(value:int):
    if value % 2 != 0:
        raise ValidationError(f"Value '{value}' is not an even number")