1. 校验前端来的数据
2. 生成页面的HTML标签
3. 保留上次输入的内容,清空密码
form类创建
from django import forms class UserInfo(forms.Form): user = forms.CharField(max_length = 32) age = forms.InterField( ) email = forms.EmailField( )
使用
fm = UserInfor({"user":"fu", "age":20, "email":"123@qq.com"})
检查数据是否合法:fm.is_vaild( ) 返回True 和 False
查看所有合法的数据 ret = fm.cleaned_data( ) 用get获取到user, age , email的值
查看不合法数据和原因 ret = fm.error( )
form标签渲染
1. {{ fm.as_p }} 渲染出所有的表单
2. {{ fm.user }}, {{ fm.age }} 渲染指定表单 可控性强 , 在表单类中指定 label属性 {{ fm.user.label }}
3. 依靠循环写入
{% for hm in fm %} {{ hm.label }}{{ fm }} {{ hm.error }} {% endfor %}
在视图函数中, 传入前端的保存正确的校验数据 fm = fm.cleaned_data( )
在下一次输入的时候不用再次输入已经正确的数据
form标签添加css样式
from django import forms class UserInfo(forms.Form): msg = {"required":"改字段不能为空"} user = forms.CharField(max_length = 32) age = forms.InterField( ) email = forms.EmailField( widget = widgets.TextInput(attrs={'class': 'form-control'}), label = "邮箱", error_msg = msg, initial = "默认值" )
此处给email标签添加了btn的css样式,字段为空时报错, 渲染时显示的默认值
钩子
from django import formsfrom django.core.exceptions import ValidationError
# 登录表单 class UserInfoForm(forms.Form): user = forms.charField(max_length = 32) password = forms.CharField(max_length = 32) email = forms.EmailField( ) def clean_user(self): user = self.cleaned_data.get("user") ret = UserInfo.objects.filter(user=user) # 在数据库中查到数据 if ret : return ret else: raise validateError("用户名不存在")