Django之form.Form字段校验
RegexValidator校验器:
在自定义的form组件类设置字段validators的值,引入RegexValidator模块
from django import forms
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
class Myform(forms.Form):
name = forms.CharField(
# required=True, # 默认为True
min_length=2,
max_length=6,
initial='abc', # 默认值
help_text='长度为2到6个字符!', # 帮助信息
error_messages=[{ # 自定义错误提示信息(默认为英文)
'required': '不能为空!',
'min_length': '不能少于2个字符!'
}],
validators=[RegexValidator(r'^(\w)+$','用户名只能有字母数字下划线组成!'),],
# disabled=True#默认为True显示
)
email = fields.EmailField(required=False,
error_messages={'required': u'邮箱不能为空','invalid': u'邮箱格式错误'},
widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': u'邮箱'}))
自定义函数校验:
from django.shortcuts import render,HttpResponse
from django import forms
from app01 import models
from django.core.validators import RegexValidator
import re
from django.core.exceptions import ValidationError
#自定义校验函数,直接在字段validators中使用
def name_valid(value):
name_re=re.compile(r'^[a-zA-Z_]+$')
if not name_re.match(value):
raise ValidationError("只能以字母下划线开头!")
class Myform(forms.Form):
name = forms.CharField(
# required=True, # 默认为True
min_length=2,
max_length=6,
initial='abc', # 默认值
help_text='长度为2到6个字符!', # 帮助信息
error_messages=[{ # 自定义错误提示信息(默认为英文)
'required': '不能为空!',
'min_length': '不能少于2个字符!'
}],
validators=[RegexValidator(r'^(\w)+$','用户名只能有字母数字下划线组成!'), name_valid],
# 自定义校验规则(列表中放自定义函数名,或者引入django内置的RegexValidator校验器,可以混合使用)
)
校验顺序:
自定义类实例化返回值对象的is_valid()方法调用:
(1)字段规则校验
(2)validators校验(RegexValidator校验器或自定义校验函数)
(3)局部钩子(类中定义的以clean_字段名命名的函数,校验正常必须返回该字段的值self.cleaned_data.get('name'))
(4)全局钩子(类中定义的函数名clean,校验正常必须返回该对象的校验结果值return self.cleaned_data)
(5)每一步通过校验单结果都以字典形式保存在类对象的cleaned_data属性中