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号
广州京杭网络科技有限公司 版权所有