1、什么是form校验
1、生成HTML标签 + 携带数据
- 保留原来提交的数据,不再担心form表单提交时页面刷新。
- 显示默认值,做编辑页面显示默认值。
2、数据校验,对用户提交的数据格式校验
example:
form = LoginForm(data=request.POST)
if form.is_valid():
print(form.cleaned_data)
else:
print(form.errors)
2、form组件
导入:from django import forms
class LoginForm(forms.Form):
role = forms.ChoiceField(
required=True,
choices=(("2", "客户"), ("1", "管理员")),
widget=forms.Select(attrs={"class": "form-control"})
)
username = forms.CharField(
initial="wupeiqi",
required=True,
正则表达式
widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "用户名"})
)
# 自定义方法(钩子)
def clean_username(self):
raise 异常
return 123
form = LoginForm(initial={"username":"xxx","password":"xx"})
注意:1、form组件中的定义的字段名和通过form表单和ajax请求传输的数据字段一样
2、通过form组件生成标签时,定义的字段名就是input标签的name字段,id字段为(id_组件字段名)
4、理解:
1、form组件先进行自定义字段的校验
2、再进行clean_(自定义字段)(钩子方法)的校验,注意:一定要有返回值,返回值是什么,校验通过后的值就是什么
3、钩子方法一定是在自定义字段校验通过后才进行校验的
4、clean方法是不管自定义字段是否校验通过都会去执行
5、在校验自定义字段钩子方法时,可以通过raise ValidationError("xxxx")来添加error
from django.core.exceptions import ValidationError
raise ValidationError("xxxxx")
6、添加error也可以通过自定义的form对象来添加
form.add_error("mobile","手机号不存在111")
一定要指定error添加的自定义字段名("mobile")
7、在进行正则校验时注意非贪婪模式("$")