验证器

正在写入验证程序

验证器是一个可调用函数,它接受一个值并引发 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 给定的for正则表达式 re.search() . 默认情况下,引发 ValidationError 具有 messagecode 如果匹配 不是 找到了。它的行为可以通过设置 inverse_matchTrue ,在这种情况下, ValidationError 匹配时引发 is 找到了。

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 必要时。

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 .

max_length

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

validate_email

validate_email

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

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 以此类推。

Changed in Django 5.0:

这个 offset 添加了参数。