django 1.8 官方文档翻译:13-12 验证器

2015年09月20日 21:36:18 ApacheCN_飞龙 阅读数:639
 https://blog.csdn.net/wizardforcel/article/details/48603183?utm_source=blogxgwz3
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=Nonemessage=Nonecode=Noneinverse_match=Noneflags=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_matchTrue来反转,这种情况下,如果找到匹配则抛出 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=Nonecode=Nonewhitelist=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=Noneregex=Nonemessage=Nonecode=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_valuemessage=None)[source]

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

Changed in Django 1.8:

添加了message参数。

MinValueValidator

class MinValueValidator(min_valuemessage=None)[source]

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

Changed in Django 1.8:

添加了message 参数。

MaxLengthValidator

class MaxLengthValidator(max_lengthmessage=None)[source]

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

Changed in Django 1.8:

添加了message参数。

MinLengthValidator

class MinLengthValidator(min_lengthmessage=None)[source]

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

Changed in Django 1.8:

添加了message 参数。

django 1.8 官方文档翻译:13-12 验证器的更多相关文章

  1. Django 2.0 官方文档翻译

    from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/' ...

  2. Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第一部分(Page 6)

    编写你的第一个 Django app,第一部分(Page 6)转载请注明链接地址 Django 2.0.1 官方文档翻译: Django 2.0.1.dev20171223092829 documen ...

  3. Spring官方文档翻译(1~6章)

    Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...

  4. Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng

    Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...

  5. iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2014年2月19日更新版)

    //转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496069.html     编号 iOS-Apple苹果官方文档翻译名称 博文链接地址 ...

  6. 基本控件文档-UIView属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  7. 基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  8. 基本控件文档-UISegment属性----iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  9. 基本控件文档-UILabel属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址   //转载请注明出处--本文永久链接:http://www.cnblogs.com/ ...

随机推荐

  1. BZOJ5340: [Ctsc2018]假面

    BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...

  2. LA2218 Triathlon

    题意 PDF 分析 设出长度\(x,y,1-x-y\),就是关于它们的二元一次不等式,判断有没有解. 可以用半平面交来解决. x/V[i]+y/U[i]+(1-x-y)/W[i] < x/V[j ...

  3. 利用git bash和git gui向git远程仓库提交文件

    1.首先在该文件夹下git init 2.然后在github下面创建一个新仓库去存储你的代码 3.然后利用add添加远程仓库 4.然后点击stage changed 5.最后点击长传 参考链接:htt ...

  4. CSS设计取消a标签的修饰,转为文本

    用法:text-decoration:none;修饰:text-decoration的用法:http://www.runoob.com/cssref/pr-text-text-decoration.h ...

  5. asp+jquery+ajax,asp后台程序执行不正常

    项目中前台页面通过jquery .ajax功能将关键数据传递到后台并写入数据库,调试中发现后台程序一直没有正常执行,后反复排查 发现asp程序中不能包含#include file语句

  6. 洛谷 1514 (NOIp2010) 引水入城

    题目:https://www.luogu.org/problemnew/show/P1514 如果有解,一个第一行的格子能覆盖第n行的一定是一个连续的区间. 因为如果不连续,则有围住了一些第n行的格子 ...

  7. 关于在windows server 2008 上部署wampserver2.5部署的问题

    1.关闭windows自带防火墙 2.httpd.conf文件权限 apache 2.4.9 外网访问的问题参考此文: http://blog.csdn.net/lysc_forever/articl ...

  8. composer.phar的作用和安装laravel5.5.4 和 vendor目录

    composer.phar有什么作用 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖 ...

  9. 【转】Jmeter做功能测试的优点和不足

    利用Jmeter做功能测试有以下优点: ●    不依赖于界面,如果服务正常启动,传递参数明确就可以添加测试用例,执行测试 ●    测试脚本不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面 ...

  10. IDA Pro 权威指南学习笔记(一) - 启动 IDA

    启动 IDA 启动 IDA,有一个欢迎界面 之后有一个对话框 选择 New 将启动一个对话框来选择将要分析的文件 选择 Go 将使 IDA 打开一个空白的工作区 如果要选择分析的文件,可以直接拖到 I ...