验证¶ T0>

编写验证器

验证程序是一个可调用的函数,如果它不符合某些标准,它将采用一个值并引发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, for example, uses this technique. If a class-based validator is used in the validators model field option, you should make sure it is serializable by the migration framework by adding deconstruct() and __eq__() methods.

如何运行验证器

请参阅form validation获取更多关于如何在表单中运行验证器的信息,以及Validating objects了解它们在模型中的运行方式。 请注意,保存模型时验证器不会自动运行,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证器。 有关模型验证如何与表单交互的信息,请参阅ModelForm documentation

内置验证器

django.core.validators模块包含一个可调用的验证器集合,可用于模型和表单字段。 它们在内部使用,但也可用于您自己的领域。 除了自定义的field.clean()方法以外,还可以使用它们。

RegexValidator

RegexValidatorregex = Nonemessage = Nonecode = Noneinverse_match = t4>,flags = 0[source]
参数:
  • 正则表达式 - 如果不是None,则覆盖regex 可以是正则表达式字符串或预编译的正则表达式。
  • 消息 - 如果不是None,则覆盖message
  • 代码 - 如果不是None,则覆盖code
  • inverse_match - 如果不是None,则覆盖inverse_match
  • flags - 如果不是None,则覆盖flags 在这种情况下,regex必须是正则表达式字符串,否则引发TypeError
正则表达式 T0> ¶ T1>

在提供的value内搜索的正则表达式模式,或预编译的正则表达式。 默认情况下,如果找不到匹配项,则用messagecode引发一个ValidationError 标准行为可以通过设置inverse_matchTrue来反转,在这种情况下,当匹配 t8时引发ValidationError >找到。 默认情况下,匹配任何字符串(包括一个空字符串)。

消息 T0> ¶ T1>

如果验证失败,则由ValidationError使用的错误消息。 Defaults to "Enter a valid value".

码 T0> ¶ T1>

如果验证失败,则由ValidationError使用的错误代码。 默认为"invalid"

inverse_match T0> ¶ T1>

regex 默认为False

标志 T0> ¶ T1>

编译正则表达式字符串regex时使用的标志。 如果regex是预编译的正则表达式,并且flags被覆盖,则引发TypeError 默认为0

EmailValidator

EmailValidator(message=None, code=None, whitelist=None)[source]
参数:
  • 消息 - 如果不是None,则覆盖message
  • 代码 - 如果不是None,则覆盖code
  • 白名单 - 如果不是None,则会覆盖whitelist
消息 T0> ¶ T1>

如果验证失败,则由ValidationError使用的错误消息。 Defaults to "Enter a valid email address".

码 T0> ¶ T1>

如果验证失败,则由ValidationError使用的错误代码。 默认为"invalid"

白名单 T0> ¶ T1>

允许的电子邮件网域白名单。 默认情况下,使用正则表达式(domain_regex属性)验证@符号后面显示的任何内容。 但是,如果该字符串出现在白名单中,则此验证将被绕过。 如果未提供,则默认白名单是['localhost'] 其他不包含点的域名将不会通过验证,因此您需要将其列入白名单。

URLValidator

URLValidator(schemes=None, regex=None, message=None, code=None)[source]

确保一个值看起来像一个URL的一个RegexValidator,并且如果没有,则会产生'invalid'

环回地址和保留的IP空间被认为是有效的。 文字IPv6地址( RFC 2732)和unicode域都受支持。

除了其RegexValidator类的可选参数外,URLValidator接受一个额外的可选属性:

方案 T0> ¶ T1>

URL / URI方案列表来验证。 如果没有提供,默认列表是['http', 'https', 'ftp', 'ftps “] T4> T0>。 作为参考,IANA网站提供了有效的URI方案的完整列表。

validate_email

validate_email T0> ¶ T1>

没有任何自定义的EmailValidator实例。

validate_slug

validate_slug T0> ¶ T1>

A RegexValidator instance that ensures a value consists of only letters, numbers, underscores or hyphens.

validate_unicode_slug

validate_unicode_slug T0> ¶ T1>

确保值仅包含Unicode字母,数字,下划线或连字符的RegexValidator实例。

validate_ipv4_address

validate_ipv4_address[source]

确保值看起来像IPv4地址的RegexValidator实例。

validate_ipv6_address

validate_ipv6_address[source]

使用django.utils.ipv6检查IPv6地址的有效性。

validate_ipv46_address

validate_ipv46_address[source]

使用validate_ipv4_addressvalidate_ipv6_address来确保值是有效的IPv4或IPv6地址。

validate_comma_separated_integer_list

validate_comma_separated_integer_list T0> ¶ T1>

确保值是逗号分隔的整数列表的RegexValidator实例。

int_list_validator

int_list_validatorsep =''message = Nonecode ='invalid' t4>,allow_negative = False[source]

Returns a RegexValidator instance that ensures a string consists of integers separated by sep. allow_negativeTrue时,它允许负整数。

MaxValueValidator

MaxValueValidatormax_valuemessage = None[source]

如果value大于max_value,则引发ValidationError代码'max_value'

MinValueValidator

MinValueValidatormin_valuemessage = None[source]

如果value小于min_value,则引发一个ValidationError,其代码为'min_value'

MaxLengthValidator

MaxLengthValidatormax_lengthmessage = None[source]

如果value的长度大于max_length,则引发一个ValidationError,其代码为'max_length'

MinLengthValidator

MinLengthValidator(min_length, message=None)[source]

Raises a ValidationError with a code of 'min_length' if the length of value is less than min_length.

DecimalValidator

DecimalValidatormax_digitsdecimal_places[source]

用以下代码引发ValidationError

  • 'max_digits' if the number of digits is larger than max_digits.
  • 'max_decimal_places' if the number of decimals is larger than decimal_places.
  • 如果整个数字的数字大于max_digitsdecimal_places之间的差异,则表示'max_whole_digits'

FileExtensionValidator

FileExtensionValidatorallowed_extensionsmessagecode[source] T6>
Django 1.11新增功能

Raises a ValidationError with a code of 'invalid_extension' if the extension of value.name (value is a File) isn’t found in allowed_extensions. 扩展名与allowed_extensions不区分大小写。

警告

不要依赖文件扩展名的确认来确定文件的类型。 无论文件包含什么数据,文件都可以重命名为扩展名。

validate_image_file_extension

validate_image_file_extension T0> ¶ T1>
Django 1.11新增功能

使用Pillow以确保value.namevalueFile)具有有效的图片扩展名

ProhibitNullCharactersValidator

ProhibitNullCharactersValidatormessage = Nonecode = None[source]
Django 2.0新增功能

Raises a ValidationError if str(value) contains one or more nulls characters ('\x00').

参数:
  • 消息 - 如果不是None,则覆盖message
  • 代码 - 如果不是None,则覆盖code
消息 T0> ¶ T1>

如果验证失败,则由ValidationError使用的错误消息。 默认为“空” 字符 不允许 T0>。

码 T0> ¶ T1>

如果验证失败,则由ValidationError使用的错误代码。 默认为"null_characters_not_allowed"