验证器是一个可调用函数,它接受一个值并引发 ValidationError
如果它不符合某些标准。验证器对于在不同类型的字段之间重用验证逻辑非常有用。
例如,这里有一个只允许偶数的验证器:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
if value % 2 != 0:
raise ValidationError(
_("%(value)s is not an even number"),
params={"value": value},
)
您可以通过字段的 validators
论点:
from django.db import models
class MyModel(models.Model):
even_field = models.IntegerField(validators=[validate_even])
因为在运行验证器之前,值被转换为python,所以您甚至可以对表单使用相同的验证器:
from django import forms
class MyForm(forms.Form):
even_field = forms.IntegerField(validators=[validate_even])
您还可以使用 __call__()
用于更复杂或可配置验证器的方法。 RegexValidator
例如,使用这种技术。如果在 validators
模型字段选项,您应该确保它是 serializable by the migration framework 通过添加 deconstruct() 和 __eq__()
方法。
见 form validation 有关如何在窗体中运行验证器的详细信息,以及 Validating objects 他们是如何在模型中运行的。请注意,在保存模型时,验证程序不会自动运行,但如果使用的是 ModelForm
,它将在表单中包含的任何字段上运行验证程序。见 ModelForm documentation 有关模型验证如何与表单交互的信息。
这个 django.core.validators
模块包含用于模型和表单字段的可调用验证器集合。它们在内部使用,但也可用于您自己的字段。它们可以用来补充或代替习俗。 field.clean()
方法。
RegexValidator
¶A RegexValidator
搜索提供的 value
对于给定的正规表达式, re.search()
.默认情况下,引发 ValidationError
使用 message
和 code
如果匹配 is not 找到了。它的行为可以通过设置来逆转 inverse_match
至 True
,在这种情况下, ValidationError
比赛时提出 is found.
要在提供的 value
,使用 re.search()
.这可能是字符串或使用 re.compile()
.返回到空字符串,它将在所有可能的 value
。
错误消息由使用 ValidationError
如果验证失败。默认为 "Enter a valid value"
.
使用的错误代码 ValidationError
如果验证失败。默认为 "invalid"
.
EmailValidator
¶一个 EmailValidator
确保值看起来像电子邮件,并引发 ValidationError
使用 message
和 code
如果不是,则长度超过320个字符的值始终被视为无效。
错误消息由使用 ValidationError
如果验证失败。默认为 "Enter a valid email address"
.
使用的错误代码 ValidationError
如果验证失败。默认为 "invalid"
.
电子邮件域的允许列表。默认情况下,是一个规则表达( domain_regex
属性)用于验证在 @
标志.但是,如果该字符串出现在 allowlist
,此验证被绕过。如果未提供,默认为 allowlist
是 ['localhost']
.其他不包含点的域无法通过验证,因此您需要将它们添加到 allowlist
根据需要。
DomainNameValidator
¶A RegexValidator
确保值看起来像域名的子集。超过255个字符的值始终被视为无效。IP地址不被接受为有效域名。
除了其父的可选参数之外 RegexValidator
班级, DomainNameValidator
接受额外的可选属性:
确定是否接受国际化域名,即包含非ASC字符的域名。默认为 True
。
URLValidator
¶A RegexValidator
确保值看起来像URL的子类,并引发错误代码 'invalid'
如果不是这样的话。值大于 max_length
字符始终被认为是无效的。
环回地址和保留的IP空间被视为有效。字面IPv6地址 (RFC 3986#section-3.2.2 )和Unicode域都支持。
除了其父级的可选参数之外 RegexValidator
类, URLValidator
接受额外的可选属性:
要验证的URL/URI方案列表。如果未提供,则默认列表为 ['http', 'https', 'ftp', 'ftps']
. 作为参考,IANA网站提供了 valid URI schemes .
警告
价值观始于 file:///
即使当 file
方案已提供。有效值必须包含主机。
可以被视为有效的值的最大长度。默认为2048个字符。
validate_email
¶安 EmailValidator
没有任何自定义的实例。
validate_domain_name
¶A DomainNameValidator
实例,无需任何自定义。
validate_slug
¶A RegexValidator
确保值仅由字母、数字、下划线或连字符组成的实例。
validate_unicode_slug
¶A RegexValidator
确保值仅由Unicode字母、数字、下划线或连字符组成的实例。
validate_ipv4_address
¶A RegexValidator
确保值类似于IPv4地址的实例。
validate_ipv6_address
¶validate_ipv46_address
¶validate_comma_separated_integer_list
¶A RegexValidator
确保值是以逗号分隔的整数列表的实例。
int_list_validator
¶返回A RegexValidator
确保字符串由整数组成的实例 sep
. 它允许负整数,当 allow_negative
是 True
.
MaxValueValidator
¶提出一个 ValidationError
用一个代码 'max_value'
如果 value
大于 limit_value
可能是可调用的。
MinValueValidator
¶提出一个 ValidationError
用一个代码 'min_value'
如果 value
小于 limit_value
可能是可调用的。
MaxLengthValidator
¶提出一个 ValidationError
用一个代码 'max_length'
如果 value
大于 limit_value
可能是可调用的。
MinLengthValidator
¶提出一个 ValidationError
用一个代码 'min_length'
如果 value
小于 limit_value
可能是可调用的。
DecimalValidator
¶加薪 ValidationError
使用以下代码:
'max_digits'
如果位数大于 max_digits
.
'max_decimal_places'
如果小数位数大于 decimal_places
.
'max_whole_digits'
如果整数位数大于 max_digits
和 decimal_places
.
FileExtensionValidator
¶提出一个 ValidationError
用一个代码 'invalid_extension'
如果延长 value.name
(value
是一个 File
)在中找不到 allowed_extensions
. 将扩展与不敏感的大小写进行比较 allowed_extensions
.
警告
不要依赖文件扩展名的验证来确定文件的类型。无论文件包含什么数据,都可以重命名为具有任何扩展名。
validate_image_file_extension
¶使用枕头确保 value.name
(value
是一个 File
有 a valid image extension .
ProhibitNullCharactersValidator
¶引发了一个 ValidationError
如果 str(value)
包含一个或多个空字符 ('\x00'
)。
错误消息由使用 ValidationError
如果验证失败。默认为 "Null characters are not allowed."
.
使用的错误代码 ValidationError
如果验证失败。默认为 "null_characters_not_allowed"
.
StepValueValidator
¶引发了一个 ValidationError
其代码为 'step_size'
如果 value
不是的整数倍 limit_value
,它可以是浮点数、整数值或小数值,也可以是可调用的。什么时候 offset
,则验证将针对 limit_value
加 offset
。例如,对于 StepValueValidator(3, offset=1.4)
有效值包括 1.4
, 4.4
, 7.4
, 10.4
以此类推。
7月 22, 2024