博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django 1.8 官方文档翻译:13-12 验证器
阅读量:7099 次
发布时间:2019-06-28

本文共 4497 字,大约阅读时间需要 14 分钟。

验证器

编写验证器

验证器是一个可调用的对象,它接受一个值,并在不符合一些规则时抛出异常。验证器有助于在不同类型的字段之间重复使用验证逻辑。

例如,这个验证器只允许偶数:

from django.core.exceptions import ValidationErrordef validate_even(value):    if value % 2 != 0:        raise ValidationError('%s is not an even number' % value)

你可以通过字段的参数将它添加到模型字段中:

from django.db import modelsclass MyModel(models.Model):    even_field = models.IntegerField(validators=[validate_even])

由于值在验证器运行之前会转化为Python,你可以在表单上使用相同的验证器:

from django import formsclass MyForm(forms.Form):    even_field = forms.IntegerField(validators=[validate_even])

你也可以使用带有 __call__()方法的类,来实现更复杂或可配置的验证器。例如,就用了这种技巧。如果一个基于类的验证器用于模型字段的选项,你应该通过添加 和__eq__() 方法确保它可以。

验证器如何运行

关于验证器如何在表单中运行,详见 。关于它们如何在模型中运行,详见 。要注意验证器不会在你保存模型时自动运行,但是如果你使用,它会在任何你表单包含的字段上运行你的验证器。关于模型验证器如何和表单交互,详见。

内建的验证器

模块包含了一系列的可调用验证器,用于模型和表单字段。它们在内部使用,但是也可以用在你自己的字段上。它们可以用在field.clean() 方法之外,或者代替它。

RegexValidator

class RegexValidator([regex=None, message=None, code=None, inverse_match=None, flags=0])

Parameters: * **regex** – 如果不是`None`则覆写 [`regex`](#django.core.validators.RegexValidator.regex “django.core.validators.RegexValidator.regex”)。可以是一个正则表达式字符串,或者预编译的正则表达式对象。 * **message** – 如果不是`None`,则覆写 [`message`](#django.core.validators.RegexValidator.message “django.core.validators.RegexValidator.message”)。 * **code** – 如果不是`None`,则覆写[`code`](#django.core.validators.RegexValidator.code “django.core.validators.RegexValidator.code”)。 * **inverse_match** – 如果不是`None`,则覆写[`inverse_match`](#django.core.validators.RegexValidator.inverse_match “django.core.validators.RegexValidator.inverse_match”)。 * **flags** – 如果不是`None`,则覆写 [`flags`](#django.core.validators.RegexValidator.flags “django.core.validators.RegexValidator.flags”)。这种情况下,[`regex`](#django.core.validators.RegexValidator.regex “django.core.validators.RegexValidator.regex”) ,必须是正则表达式字符串,否则抛出[`TypeError`](https://docs.python.org/3/library/exceptions.html#TypeError) 异常。

regex

用于搜索提供的value的正则表达式,或者是预编译的正则表达式对象。通常在找不到匹配时抛出带有 和的 异常。这一标准行为可以通过设置 为True来反转,这种情况下,如果找到匹配则抛出 异常。通常它会匹配任何字符串(包括空字符串)。

message

验证失败时所使用的错误信息。默认为"Enter a valid value"

code

验证失败时所使用的错误代码。默认为"invalid"

inverse_match

New in Django 1.7.

的匹配模式。默认为False

flags

New in Django 1.7.

编译正则表达式字符串时所用的标识。如果是预编译的正则表达式,并且覆写了,会产生异常。默认为 0

EmailValidator

class EmailValidator([message=None, code=None, whitelist=None])

Parameters: * **message** – 如果不是 `None`,则覆写[`message`](#django.core.validators.EmailValidator.message “django.core.validators.EmailValidator.message”)。 * **code** – 如果不是 `None`,则覆写[`code`](#django.core.validators.EmailValidator.code “django.core.validators.EmailValidator.code”)。 * **whitelist** – 如果不是`None`,则覆写 [`whitelist`](#django.core.validators.EmailValidator.whitelist “django.core.validators.EmailValidator.whitelist”)。

message

验证失败时所使用的错误信息。默认为"Enter a valid email address"

code

验证失败时所使用的错误代码。默认为"invalid"

whitelist

所允许的邮件域名的白名单。通常,正则表达式(domain_regex 属性) 用于验证 @ 符号后面的任何东西。但是,如果这个字符串在白名单里,就可以通过验证。如果没有提供,默认的白名单是 ['localhost']。其它不包含点符号的域名不能通过验证,所以你需要按需将它们添加进白名单。

URLValidator

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

确保一个值看起来像是URL,并且如果不是的话产生'invalid'错误代码。

回送地址以及保留的IP空间被视为有效。同时也支持字面的IPv6地址 () 以及unicode域名。

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

schemes

需要验证的URL/URI模式列表。如果没有提供,默认为 ['http', 'https', 'ftp', 'ftps']。IANA 网站提供了 的完整列表作为参考。

Changed in Django 1.7:

添加了可选的schemes 属性。

Changed in Django 1.8:

添加了对IPv6 地址, unicode 域名, 以及含有验证信息的URL的支持。

validate_email

validate_email

一个不带有任何自定义的实例。

validate_slug

validate_slug

一个 实例,确保值只含有字母、数字、下划线和连字符。

validate_ipv4_address

validate_ipv4_address

一个的实例,确保值是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

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

MaxValueValidator

class MaxValueValidator(max_value, message=None)

如果value 大于 max_value,抛出带有'max_value'代码的 异常。

Changed in Django 1.8:

添加了message参数。

MinValueValidator

class MinValueValidator(min_value, message=None)

如果value小于min_value,抛出带有'min_value'代码的异常。

Changed in Django 1.8:

添加了message 参数。

MaxLengthValidator

class MaxLengthValidator(max_length, message=None)

如果value的长度大于max_length,抛出带有'max_length'代码的 异常。

Changed in Django 1.8:

添加了message参数。

MinLengthValidator

class MinLengthValidator(min_length, message=None)

如果value的长度小于min_length,抛出带有'min_length'代码的异常。

Changed in Django 1.8:

添加了message 参数。

译者:,原文:。

本文以 协议发布,转载请保留作者署名和文章出处。

人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

你可能感兴趣的文章
实现虚拟机linux共享上网(利用NAT)
查看>>
【MyBatis框架】查询缓存-一级缓存原理
查看>>
ASP.NET MVC设置允许跨域访问
查看>>
CentOS7下Apache2.4.6使用MySQL5.7验证
查看>>
数据库设计规范之命名规范
查看>>
人力资源管理信息系统
查看>>
阿里云的maven代理,比较快
查看>>
翻牌子
查看>>
php 获取今天明天昨天时间戳的方法总结
查看>>
浅谈finally使用坑。
查看>>
Python协程深入理解
查看>>
Spring笔记——3.容器中的Bean
查看>>
常用的CMD命令
查看>>
为何说SOA提升ERP软件竞争力
查看>>
(*(void(*) ())0)()------这是什么?
查看>>
nginx
查看>>
分享一个Javascript的keyframe动画类库 - Rekapi
查看>>
免费资源下载:两套超棒的UI界面设计素材集
查看>>
Linux 命令相关
查看>>
RHEL6入门系列之四,磁盘分区、文件系统和目录结构
查看>>