验证器

正在写入验证程序

验证器是一个可调用函数,它接受一个值并引发 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

class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)[源代码]
参数:
  • regex -- 如果没有 None 超越 regex . 可以是正则表达式字符串或预编译的正则表达式。

  • message -- 如果没有 None 超越 message .

  • code -- 如果没有 None 超越 code .

  • inverse_match -- 如果没有 None 超越 inverse_match .

  • flags -- 如果没有 None 超越 flags . 在那种情况下, regex 必须是正则表达式字符串,或 TypeError 提高了。

A RegexValidator 搜索提供的 value 对于给定的正规表达式, re.search() .默认情况下,引发 ValidationError 使用 messagecode 如果匹配 is not 找到了。它的行为可以通过设置来逆转 inverse_matchTrue ,在这种情况下, ValidationError 比赛时提出 is found.

regex

要在提供的 value ,使用 re.search() .这可能是字符串或使用 re.compile() .返回到空字符串,它将在所有可能的 value

message

错误消息由使用 ValidationError 如果验证失败。默认为 "Enter a valid value" .

code

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

inverse_match

的匹配模式 regex .默认为 False .

flags

这个 regex flags 在编译规则表达字符串时使用 regex 。如果 regex 是一个预编译的正规表达式,并且 flags 被覆盖, TypeError 被提出。默认为 0

EmailValidator

class EmailValidator(message=None, code=None, allowlist=None)[源代码]
参数:
  • message -- 如果没有 None 超越 message .

  • code -- 如果没有 None 超越 code .

  • allowlist -- 如果不是 None ,覆盖 allowlist

一个 EmailValidator 确保值看起来像电子邮件,并引发 ValidationError 使用 messagecode 如果不是,则长度超过320个字符的值始终被视为无效。

message

错误消息由使用 ValidationError 如果验证失败。默认为 "Enter a valid email address" .

code

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

allowlist

电子邮件域的允许列表。默认情况下,是一个规则表达( domain_regex 属性)用于验证在 @ 标志.但是,如果该字符串出现在 allowlist ,此验证被绕过。如果未提供,默认为 allowlist['localhost'] .其他不包含点的域无法通过验证,因此您需要将它们添加到 allowlist 根据需要。

DomainNameValidator

New in Django 5.1.
class DomainNameValidator(accept_idna=True, message=None, code=None)[源代码]

A RegexValidator 确保值看起来像域名的子集。超过255个字符的值始终被视为无效。IP地址不被接受为有效域名。

除了其父的可选参数之外 RegexValidator 班级, DomainNameValidator 接受额外的可选属性:

accept_idna

确定是否接受国际化域名,即包含非ASC字符的域名。默认为 True

URLValidator

class URLValidator(schemes=None, regex=None, message=None, code=None)[源代码]

A RegexValidator 确保值看起来像URL的子类,并引发错误代码 'invalid' 如果不是这样的话。值大于 max_length 字符始终被认为是无效的。

环回地址和保留的IP空间被视为有效。字面IPv6地址 (RFC 3986#section-3.2.2 )和Unicode域都支持。

除了其父级的可选参数之外 RegexValidator 类, URLValidator 接受额外的可选属性:

schemes

要验证的URL/URI方案列表。如果未提供,则默认列表为 ['http', 'https', 'ftp', 'ftps'] . 作为参考,IANA网站提供了 valid URI schemes .

警告

价值观始于 file:/// 即使当 file 方案已提供。有效值必须包含主机。

max_length

可以被视为有效的值的最大长度。默认为2048个字符。

validate_email

validate_email

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

validate_domain_name

New in Django 5.1.
validate_domain_name

A DomainNameValidator 实例,无需任何自定义。

validate_slug

validate_slug

A RegexValidator 确保值仅由字母、数字、下划线或连字符组成的实例。

validate_unicode_slug

validate_unicode_slug

A RegexValidator 确保值仅由Unicode字母、数字、下划线或连字符组成的实例。

validate_ipv4_address

validate_ipv4_address[源代码]

A RegexValidator 确保值类似于IPv4地址的实例。

validate_ipv6_address

validate_ipv6_address[源代码]

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

validate_ipv46_address

validate_ipv46_address[源代码]

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

validate_comma_separated_integer_list

validate_comma_separated_integer_list

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

int_list_validator

int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)[源代码]

返回A RegexValidator 确保字符串由整数组成的实例 sep . 它允许负整数,当 allow_negativeTrue .

MaxValueValidator

class MaxValueValidator(limit_value, message=None)[源代码]

提出一个 ValidationError 用一个代码 'max_value' 如果 value 大于 limit_value 可能是可调用的。

MinValueValidator

class MinValueValidator(limit_value, message=None)[源代码]

提出一个 ValidationError 用一个代码 'min_value' 如果 value 小于 limit_value 可能是可调用的。

MaxLengthValidator

class MaxLengthValidator(limit_value, message=None)[源代码]

提出一个 ValidationError 用一个代码 'max_length' 如果 value 大于 limit_value 可能是可调用的。

MinLengthValidator

class MinLengthValidator(limit_value, message=None)[源代码]

提出一个 ValidationError 用一个代码 'min_length' 如果 value 小于 limit_value 可能是可调用的。

DecimalValidator

class DecimalValidator(max_digits, decimal_places)[源代码]

加薪 ValidationError 使用以下代码:

  • 'max_digits' 如果位数大于 max_digits .

  • 'max_decimal_places' 如果小数位数大于 decimal_places .

  • 'max_whole_digits' 如果整数位数大于 max_digitsdecimal_places .

FileExtensionValidator

class FileExtensionValidator(allowed_extensions, message, code)[源代码]

提出一个 ValidationError 用一个代码 'invalid_extension' 如果延长 value.name (value 是一个 File )在中找不到 allowed_extensions . 将扩展与不敏感的大小写进行比较 allowed_extensions .

警告

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

validate_image_file_extension

validate_image_file_extension[源代码]

使用枕头确保 value.name (value 是一个 Filea valid image extension .

ProhibitNullCharactersValidator

class ProhibitNullCharactersValidator(message=None, code=None)[源代码]

引发了一个 ValidationError 如果 str(value) 包含一个或多个空字符 ('\x00' )。

参数:
  • message -- 如果没有 None 超越 message .

  • code -- 如果没有 None 超越 code .

message

错误消息由使用 ValidationError 如果验证失败。默认为 "Null characters are not allowed." .

code

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

StepValueValidator

class StepValueValidator(limit_value, message=None, offset=None)[源代码]

引发了一个 ValidationError 其代码为 'step_size' 如果 value 不是的整数倍 limit_value ,它可以是浮点数、整数值或小数值,也可以是可调用的。什么时候 offset ,则验证将针对 limit_valueoffset 。例如,对于 StepValueValidator(3, offset=1.4) 有效值包括 1.44.47.410.4 以此类推。