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
異常。驗證器有助於在不一樣類型的字段之間重複使用驗證邏輯。html
例如,這個驗證器只容許偶數:python
from django.core.exceptions import ValidationError def validate_even(value): if value % 2 != 0: raise ValidationError('%s is not an even number' % value)
你能夠經過字段的validators
參數將它添加到模型字段中:git
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
模型字段的選項,你應該經過添加deconstruct() 和__eq__()
方法確保它能夠被遷移框架序列化。django
關於驗證器如何在表單中運行,詳見表單驗證 。關於它們如何在模型中運行,詳見 驗證對象。要注意驗證器不會在你保存模型時自動運行,可是若是你使用ModelForm
,它會在任何你表單包含的字段上運行你的驗證器。關於模型驗證器如何和表單交互,詳見ModelForm 文檔。markdown
django.core.validators
模塊包含了一系列的可調用驗證器,用於模型和表單字段。它們在內部使用,可是也能夠用在你本身的字段上。它們能夠用在field.clean()
方法以外,或者代替它。框架
class RegexValidator
([regex=None, message=None, code=None, inverse_match=None, flags=0])[source]dom
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
異常。一般它會匹配任何字符串(包括空字符串)。spa
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。
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']
。其它不包含點符號的域名不能經過驗證,因此你須要按需將它們添加進白名單。
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
一個不帶有任何自定義的EmailValidator
實例。
validate_slug
一個 RegexValidator
實例,確保值只含有字母、數字、下劃線和連字符。
validate_ipv4_address
一個RegexValidator
的實例,確保值是IPv4地址。
validate_ipv6_address
[source]
使用django.utils.ipv6
來檢查是不是 IPv6 地址。
validate_ipv46_address
[source]
使用validate_ipv4_address
和 validate_ipv6_address
值是有效的 IPv4 或 IPv6 地址。
validate_comma_separated_integer_list
一個RegexValidator
的實例,確保值是整數的逗號分隔列表。
class MaxValueValidator
(max_value, message=None)[source]
若是value
大於 max_value
,拋出帶有'max_value'
代碼的ValidationError
異常。
Changed in Django 1.8:
添加了message
參數。
class MinValueValidator
(min_value, message=None)[source]
若是value
小於min_value
,拋出帶有'min_value'
代碼的ValidationError
異常。
Changed in Django 1.8:
添加了message
參數。
class MaxLengthValidator
(max_length, message=None)[source]
若是value
的長度大於max_length
,拋出帶有'max_length'
代碼的ValidationError
異常。
Changed in Django 1.8:
添加了message
參數。
class MinLengthValidator
(min_length, message=None)[source]
若是value
的長度小於min_length
,拋出帶有'min_length'
代碼的ValidationError
異常。
Changed in Django 1.8:
添加了message
參數。