案例程序:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/fm/" method="POST"> #3个输入框分别是user/pwd/email
{% csrf_token %}
<input type="text" name="user" />
<input type="text" name="pwd" />
<input type="text" name="email" />
<input type="submit" value="提交" />
</form>
</body>
</html>
views函数:
from django import forms # 首先需导入forms包 class FM(forms.Form): #建立一个验证类
user = forms.CharField(error_messages={'required': '用户名不能为空'}) #自定制的中文错误返回
pwd = forms.CharField(
max_length='12',
min_length='8',
error_messages={'required': '密码不能为空', 'max_length': '密码最大长度不能大于12', 'min_length': '密码最小长度不能小于8'}
)
email = forms.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'}) def fm(request):
if request.method == "GET":
return render(request, 'fm.html')
elif request.method == "POST":
# 获取用户的所有数据
# 每条数据请求的验证
# 成功:获取所有的正确信息
# 失败:显示错误信息
obj = FM(request.POST) #生成一个表单验证类
r1 = obj.is_valid() #验证输出的结果 成功为true 错误为false
print(r1)
if r1:
print(obj.cleaned_data) #如果成功返回验证好的数据并打印
else:
print(obj.errors.as_json) #如果失败返回错误信息打印
return redirect('/fm/')
显示的信息:
达到了自定制返回的错误信息为中文的目的
向前端送出验证错误信息:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/fm/" method="POST">
<p><input type="text" name="user" /> {{ obj.errors.user.0 }} </p> #前端显示验证错误信息
<p><input type="text" name="pwd" /> {{ obj.errors.pwd.0 }} </p>
<p><input type="text" name="email" /> {{ obj.errors.email.0 }} </p>
<input type="submit" value="提交" /> </form>
</body>
</html>
def fm(request):
if request.method == "GET":
obj = FM()
return render(request, 'fm.html', {'obj': obj}) # 传送一个验证数据对象obj
elif request.method == "POST":
# 获取用户的所有数据
# 每条数据请求的验证
# 成功:获取所有的正确信息
# 失败:显示错误信息
obj = FM(request.POST)
r1 = obj.is_valid()
print(r1)
if r1:
print(obj.cleaned_data)
else:
print(obj.errors)
return render(request, 'fm.html', {'obj': obj})
return render(request, 'fm.html')
完整的注册页面的简单表单验证加注册:
def fm(request):
if request.method == "GET":
obj = FM()
return render(request, 'fm.html', {'obj': obj})
elif request.method == "POST":
obj = FM(request.POST)
r1 = obj.is_valid()
if r1:
models.UserInfo.objects.create(**obj.cleaned_data) #直接一条语句数据注册成功
else:
return render(request, 'fm.html', {'obj': obj})
return render(request, 'fm.html')
使用forms类生成字段和html标签:
from django.forms import widgets # widgets是生成html标签的插件
from django.forms import fields # 在定义forms类时建议最好使用fields来表示字段
class FM(forms.Form):
user = fields.CharField(error_messages={'required': '用户名不能为空'}, # 自定义错误
widgets=widgets.Textarea(attrs={'class': 'c1'}),#调用插件widgets 然后生成Textarea标签(多行文本输入框) 然后添加属性attrs(class=c1)
)
pwd = fields.CharField(
max_length='12',
min_length='8',
error_messages={'required': '密码不能为空', 'max_length': '密码最大长度不能大于12', 'min_length': '密码最小长度不能小于8'},
widgets=widgets.PasswordInput(attrs={'class': 'c2'}), #调用插件widgets 然后生成PasswordInout标签(多行文本输入框) 然后添加属性attrs(class=c2)
) email = fields.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})
生成的标签: