class CharField(Field):
def __init__(self, *, max_length=None, min_length=None, strip=True, empty_value='', **kwargs):
self.max_length = max_length
self.min_length = min_length
self.strip = strip
self.empty_value = empty_value
super().__init__(**kwargs)
使用 max_length 与 min_length 分别可以限制字段值的最大值与最小值,对于不满足的条件字段值,将抛出 ValidationError 异常。strip 属性默认执行 Python 的 strip() 方法,可以除去字符串两端的空格。如果传递的是空值的时候,将会使用 empty_value 属性设定的值,如下所示:
In [1]: from django import forms
In [2]: title=forms.CharField(empty_value='C语言中文网')
In [3]: title.clean('')
Out[3]: 'C语言中文网'
class IntegerField(Field):
#控件类型
widget = NumberInput
default_error_messages = {
'invalid': _('Enter a whole number.'),
}
#正则匹配模式
re_decimal = re.compile(r'\.0*\s*$')
#构造函数
def __init__(self, *, max_value=None, min_value=None, **kwargs):
self.max_value, self.min_value = max_value, min_value
if kwargs.get('localize') and self.widget == NumberInput:
# Localized number input is not well supported on most browsers
kwargs.setdefault('widget', super().widget)
super().__init__(**kwargs)
max_value 与 min_value 用来限定取值范围,如果给出的值不在这两者的范围之内,那么就会抛出异常。如下所示:
In [5]: x=forms.IntegerField(max_value=5,min_value=1)
In [6]: x.clean('4')
#字符串强转为整数型4
Out[6]: 4
In [7]: x.clean('6')
....
#抛出异常
ValidationError: ['确保该值小于或等于5。']
class ChoiceField(Field):
widget = Select
default_error_messages = {
'invalid_choice': _('Select a valid choice. %(value)s is not one of the available choices.'),
}
def __init__(self, *, choices=(), **kwargs):
super().__init__(**kwargs)
self.choices = choices
它需要一个二元数组或者能够返回可迭代二元组的函数对象作为参数,它的使用方法如下所示:
In [28]: Gender=(('M','male'),('F','female'))
In [29]: sex=forms.ChoiceField(choices=Gender)
In [30]: sex
Out[30]: <django.forms.fields.ChoiceField at 0x1435430>
在页面中 sex 字段对应的选择框中有两个可选值即 male 和 fmale。如果表单被提交,那么只有二元组的第一个元素,也就是 M 和 F 会被提交到后台服务器进行处理。
class EmailField(CharField):
#默认控件
widget = EmailInput
default_validators = [validators.validate_email]
def __init__(self, **kwargs):
super().__init__(strip=True, **kwargs)
widget 默认使用 EmailInput。由于需要输入电子邮件的表单比较常见,如用户注册表单、身份验证表单等,所以,这个字段类型用在这些场景中会非常方便。这种验证特定结构的字段还有 UUIDField、GenericIPAddressField、URLField、SlugField 等,它们分别用来验证 UUID(通用唯一识别码)、IP 地址、URL 以及字符串。
['%Y-%m-%d %H:%M:%S', # '2019-1-5 11:15:57' '%Y-%m-%d %H:%M', # '2019-3-25 13:30' '%Y-%m-%d', # '2019-12-5' '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59' '%m/%d/%Y %H:%M', # '10/25/2006 14:30' '%m/%d/%Y', # '10/25/2006' '%m/%d/%y %H:%M:%S', # '1/15/09 14:30:59' '%m/%d/%y %H:%M', # '1/15/09 14:30' '%m/%d/%y'] # '1/15/09'DateTimeField 的 clean 方法接受的值类型可以是 datetime.datetime、datetime.date 或符合特定格式的字符串,最终会返回 datetime.datetime 对象或抛出异常。实例如下:
In [1]: from django import forms In [2]: x=forms.DateTimeField(input_formats=['2019-1-5 11:12:12']) In [3]: x Out[3]: <django.forms.fields.DateTimeField at 0x6721b50>
In [18]: from django.forms import ComboField,CharField,EmailField
In [19]: f = ComboField(fields=[CharField(max_length=10), EmailField()])
In [20]: f.clean('caoxuesong@163.com')
.....
#报错异常
ValidationError: ['确保该变量包含不超过 10 字符 (目前字符数 18)。']
Django 表单系统提供了多个诸如此类的验证字段,比如 MultipleChoiceField、SplitDateTimeField 等。在这里不做介绍,建议参阅官方文档了解即可。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有