django 1.8 官方文档翻译:13-12 验证器
django 1.8 官方文档翻译:13-12 验证器
class UserWalletAccount(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='wallet', verbose_name='会员ID')
credit_amount = models.DecimalField(max_digits=12, decimal_places=2,
verbose_name='充值余额', default=0.0, validators=[MinValueValidator(0)])
present_amount = models.DecimalField(max_digits=12, decimal_places=2,
verbose_name='赠送余额', default=0.0, validators=[MinValueValidator(0)])
frozen_amount = models.DecimalField(max_digits=12, decimal_places=2,
verbose_name='冻结余额', default=0.0, validators=[MinValueValidator(0)])
验证器
编写验证器
验证器是一个可调用的对象,它接受一个值,并在不符合一些规则时抛出ValidationError
异常。验证器有助于在不同类型的字段之间重复使用验证逻辑。
例如,这个验证器只允许偶数:
from django.core.exceptions import ValidationError
def validate_even(value):
if value % 2 != 0:
raise ValidationError('%s is not an even number' % value)
- 1
- 2
- 3
- 4
- 5
- 6
你可以通过字段的validators
参数将它添加到模型字段中:
from django.db import models
class MyModel(models.Model):
even_field = models.IntegerField(validators=[validate_even])
- 1
- 2
- 3
- 4
- 5
由于值在验证器运行之前会转化为Python,你可以在表单上使用相同的验证器:
from django import forms
class MyForm(forms.Form):
even_field = forms.IntegerField(validators=[validate_even])
- 1
- 2
- 3
- 4
- 5
你也可以使用带有 __call__()
方法的类,来实现更复杂或可配置的验证器。例如,RegexValidator
就用了这种技巧。如果一个基于类的验证器用于validators
模型字段的选项,你应该通过添加deconstruct() 和__eq__()
方法确保它可以被迁移框架序列化。
验证器如何运行
关于验证器如何在表单中运行,详见表单验证 。关于它们如何在模型中运行,详见 验证对象。要注意验证器不会在你保存模型时自动运行,但是如果你使用ModelForm
,它会在任何你表单包含的字段上运行你的验证器。关于模型验证器如何和表单交互,详见ModelForm 文档。
内建的验证器
django.core.validators
模块包含了一系列的可调用验证器,用于模型和表单字段。它们在内部使用,但是也可以用在你自己的字段上。它们可以用在field.clean()
方法之外,或者代替它。
RegexValidator
class RegexValidator
([regex=None, message=None, code=None, inverse_match=None, flags=0])[source]
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
的正则表达式,或者是预编译的正则表达式对象。通常在找不到匹配时抛出带有 message
和code
的 ValidationError
异常。这一标准行为可以通过设置inverse_match
为True
来反转,这种情况下,如果找到匹配则抛出 ValidationError
异常。通常它会匹配任何字符串(包括空字符串)。
message
验证失败时ValidationError
所使用的错误信息。默认为"Enter a valid value"
。
code
验证失败时ValidationError
所使用的错误代码。默认为"invalid"
。
inverse_match
New in Django 1.7.
regex
的匹配模式。默认为False
。
flags
New in Django 1.7.
编译正则表达式字符串regex
时所用的标识。如果regex
是预编译的正则表达式,并且覆写了flags
,会产生TypeError
异常。默认为 0。
EmailValidator
class EmailValidator
([message=None, code=None, whitelist=None])[source]
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
验证失败时ValidationError
所使用的错误信息。默认为"Enter a valid email address"
。
code
验证失败时ValidationError
所使用的错误代码。默认为"invalid"
。
whitelist
所允许的邮件域名的白名单。通常,正则表达式(domain_regex
属性) 用于验证 @ 符号后面的任何东西。但是,如果这个字符串在白名单里,就可以通过验证。如果没有提供,默认的白名单是 ['localhost']
。其它不包含点符号的域名不能通过验证,所以你需要按需将它们添加进白名单。
URLValidator
class URLValidator
([schemes=None, regex=None, message=None, code=None])[source]
RegexValidator
确保一个值看起来像是URL,并且如果不是的话产生'invalid'
错误代码。
回送地址以及保留的IP空间被视为有效。同时也支持字面的IPv6地址 (RFC 2732) 以及unicode域名。
除了父类RegexValidator
的可选参数之外,URLValidator
接受一个额外的可选属性:
schemes
需要验证的URL/URI模式列表。如果没有提供,默认为 ['http', 'https', 'ftp', 'ftps']
。IANA 网站提供了 有效的URI模式的完整列表作为参考。
Changed in Django 1.7:
添加了可选的schemes
属性。
Changed in Django 1.8:
添加了对IPv6 地址, unicode 域名, 以及含有验证信息的URL的支持。
validate_email
validate_email
一个不带有任何自定义的EmailValidator
实例。
validate_slug
validate_slug
一个 RegexValidator
实例,确保值只含有字母、数字、下划线和连字符。
validate_ipv4_address
validate_ipv4_address
一个RegexValidator
的实例,确保值是IPv4地址。
validate_ipv6_address
validate_ipv6_address
[source]
使用django.utils.ipv6
来检查是否是 IPv6 地址。
validate_ipv46_address
validate_ipv46_address
[source]
使用validate_ipv4_address
和 validate_ipv6_address
值是有效的 IPv4 或 IPv6 地址。
validate_comma_separated_integer_list
validate_comma_separated_integer_list
一个RegexValidator
的实例,确保值是整数的逗号分隔列表。
MaxValueValidator
class MaxValueValidator
(max_value, message=None)[source]
如果value
大于 max_value
,抛出带有'max_value'
代码的ValidationError
异常。
Changed in Django 1.8:
添加了message
参数。
MinValueValidator
class MinValueValidator
(min_value, message=None)[source]
如果value
小于min_value
,抛出带有'min_value'
代码的ValidationError
异常。
Changed in Django 1.8:
添加了message
参数。
MaxLengthValidator
class MaxLengthValidator
(max_length, message=None)[source]
如果value
的长度大于max_length
,抛出带有'max_length'
代码的ValidationError
异常。
Changed in Django 1.8:
添加了message
参数。
MinLengthValidator
class MinLengthValidator
(min_length, message=None)[source]
如果value
的长度小于min_length
,抛出带有'min_length'
代码的ValidationError
异常。
Changed in Django 1.8:
添加了message
参数。
django 1.8 官方文档翻译:13-12 验证器的更多相关文章
- Django 2.0 官方文档翻译
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/' ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第一部分(Page 6)
编写你的第一个 Django app,第一部分(Page 6)转载请注明链接地址 Django 2.0.1 官方文档翻译: Django 2.0.1.dev20171223092829 documen ...
- Spring官方文档翻译(1~6章)
Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...
- Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng
Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...
- iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2014年2月19日更新版)
//转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496069.html 编号 iOS-Apple苹果官方文档翻译名称 博文链接地址 ...
- 基本控件文档-UIView属性---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...
- 基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...
- 基本控件文档-UISegment属性----iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...
- 基本控件文档-UILabel属性---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/ ...
随机推荐
- Struts2常用标签总结
Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...
- 【JQuery】学习
JavaScript参考 JQuery 学习总结及实例 1.JQuery概念 A.Jquery是一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器,jQuery ...
- WPF 自定义DateControl DateTime控件(转)
自定义日期控件,月份选择.如下是日期的一些效果图. 具体的样式.颜色可以根据下面的代码,自己调节即可 1.日期控件的界面 <UserControl x:Class="WpfApp ...
- selenium - css 定位
前言: CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现. CSS 使用选择器来为页面元素绑定属性.这些选择器可以被 selenium ...
- SpringMvc入门四----rest风格Url
知识点: REST风格URL简介 SpringMvc对rest风格的支持 @PathVariable 获取 Url 变量 SpringMvc对静态资源的处理 REST风格URL简介: 我们平时看到的s ...
- iSCSI存储的3种连接方式
我们分析了iSCSI存储的系统结构,下面来看iSCSI是如何与服务器.工作站等主机设备来连接的,也就是我们如何建立一个iSCSI网络存储系统. iSCSI设备的主机接口一般默认都是IP接口,可以直接与 ...
- HTMLTestRunner生成报告 中文展示乱码的问题
- chrome打开新标签页插件
标签(空格分隔): 日常办公,chrome浏览器 一直被chrome浏览器打开新标签页困扰,每次点开一个新标签页还要再去点一下主页,才能打开搜索页面.如果直接点击主页,又会把当前的页面刷掉,实在是非常 ...
- .Net 框架实现AOP(动态代理实现AOP,本文为翻译)
在上一节,我们将静态实现AOP,但是对于一个大型项目,要想为每个类,每个方法都去实现AOP ,进行日志记录和权限验证似乎是不可能的. 即使可能对于成百上千个类维护,也是很难维护.所以今天的主题就是如标 ...
- Tulpar-web渗透小工具
首先git clone一下,项目地址:https://github.com/anilbaranyelken/tulpar 下载完后打开文件 然后安装所需的Python模块 安装完成后先看一下帮助 命令 ...