一、Form表单验证:
原理:在Form表单提交到Views后台时,利用Django特有的验证模版技术(实质上实现验证功能的类)对表单数据进行验证,然后将结果返回到页面上。
html页面代码如下:
<form method="post" action="/login.html">
<p>
<input type="text" name="user" placeholder="用户名">
<!与后台绑定的用户名错误信息>
<span>{
{ obj_login_form.errors.user.0 }}</span>
</p>
<p>
<input type="text" name="email" placeholder="邮箱">
<!与后台绑定的邮箱错误信息>
<span>{
{ obj_login_form.errors.email.0 }}</span>
</p>
<input type="submit" value="提交">
</form>
后台views代码:
from django import forms
class Login_Form(forms.Form):
# 与前台名称一致的用户名字段,Django内置的普通str验证方法,增加验证最小长度为3
user=forms.CharField(min_length=3)
# django内置的Email验证方法
email=forms.EmailField()
def login(req):
if req.method=='GET':
return render(req,'login.html')
elif req.method=='POST':
# 将表单数据放入Login_Form中
obj_login_form=Login_Form(req.POST)
# 通过is_valid()方法验证,返回是否有错误信息
if obj_login_form.is_valid():
# 当验证通过后打印通过的数据
print(obj_login_form.clean())
else:
# 打印验证失败的错误信息
print(obj_login_form.errors)
return render(req,'login.html',{'obj_login_form':obj_login_form})
注意:
定义的验证类中验证的字段名与前台页面需要验证的字段名必须一致。Django实现了前台模版调用后台内容为空时自动忽略,因此在get请求时即使没有将{'obj_login_form':obj_login_form}传给前台页面,也不会报错。
当前验证效果: