django中的form为用户提供验证,并且form组件也可以生成html
在我们通过
下列代码来创建form组件,
from django import forms
from django.forms import widgets
from django.forms import fields
class user_conform(forms.Form):
user=fields.CharField( error_messages={'required': '用户名不能为空.'},
widget=widgets.TextInput(attrs={'class': 'c1'}),
label="用户名",
)
email = fields.EmailField(error_messages={'required': '邮箱不能为空.','invalid':"邮箱格式错误"})
pwd=fields.CharField(max_length=11,
min_length=6,
error_messages={'required':'密码不能为空','max_length':'密码不能超过11位','min_length':'密码不能低于6位'})
city1=fields.ChoiceField(choices=[(0,'北京'),(1,'上海'),(2,'广州')])
city2=fields.MultipleChoiceField(choices=[(0,'山西'),(1,'陕西'),(2,'河南')])
这里user_form类中的字段,必须与要验证的html中标签的name相同。
在form验证时。可以通过obj.is_valid()方法拿到验证结果是false还是true
def login_test(request):
#假设从数据库取到数据dict
if request.method=='GET':
dict={'user':'欧文',
'email':'krtr@163.com',
'pwd':'kaierteren',
'city1':1,
'city2':[0,2]
}
form_obj=user_conform(initial=dict)
#将得到的数据放到user_conform中
return render(request,'login_test.html',{'obj':form_obj})
else:
obj=user_conform(request.POST)
#将post数据传到form组件验证
if obj.is_valid():
print(type(obj.cleaned_data))
#可以拿到验证正确的数据
else:
return render(request,'login_test.html', {'obj': obj})
return HttpResponse('成功')
form组件也可以用来生成html,在上述代码中,后台向前端返回的是user_conform类的对象,这个对象可以生成html。请看下面代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="/llll/" method="post">
{% csrf_token %}
<p>{{ obj.user.label }}:{{ obj.user }} {{obj.errors.user.0}}</p>
<p>{{ obj.pwd.label }}{{obj.pwd}} {{ obj.errors.pwd.0 }}</p>
<p>{{ obj.email.label }}{{ obj.email }}{{ obj.errors.email.0 }}</p>
{{ obj.city1 }}
{{ obj.city2 }}
<input type="submit" value="提交">
</form>
</body>
</html>
通过obj.user.label, obj.user, obj.errors.user.0 我们可以生成html标签,取到标签数据,错误信息等。
这些在form类里设置。
class user_conform(forms.Form):
user=fields.CharField( error_messages={‘required’: ‘用户名不能为空.’},#这里设置错误信息
widget=widgets.TextInput(attrs={‘class’: ‘c1’}),
label=“用户名”,
)#这里设置标签信息
email = fields.EmailField(error_messages={‘required’: ‘邮箱不能为空.’,‘invalid’:“邮箱格式错误”})
pwd=fields.CharField(max_length=11,
min_length=6,
error_messages={‘required’:‘密码不能为空’,‘max_length’:‘密码不能超过11位’,‘min_length’:‘密码不能低于6位’})
city1=fields.ChoiceField(choices=[(0,‘北京’),(1,‘上海’),(2,‘广州’)])
city2=fields.MultipleChoiceField(choices=[(0,‘山西’),(1,‘陕西’),(2,‘河南’)])