版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25611295/article/details/85708995
Form表单验证(用户请求验证+生成HTML标签)
应用场景:
示例:
1、用户管理
2、添加用户页面、 显示HTML标签、
3、提交:数据验证(例如用户名密码不为空,电话号码位数等)
4、成功之后保存
error_messages:错误信息
widget:渲染方式
required:不为空
案例:写一个简单的注册,并且验证填写规范,并且成功把数据存入Mysql
注意,更多的字段判断参考:https://www.cnblogs.com/onda/p/7509172.html
views.py逻辑:
from django.forms import Form
from django.forms import fields
from django.forms import widgets
#引入django 的三个Form 的三个规范
class RegisterForm(Form):
username = fields.CharField(
error_messages = {'required':'用户名不能为空'},
#'class':'c1' 可以用于前端补充样式
widget = widgets.TextInput(attrs={'class':'c1'})
)
password = fields.CharField(
#最小字节长度是4,最大字节长度是8
required=True,
min_length = 4,
max_length = 8,
error_messages = {'required':'密码栏不能为空'},
widget = widgets.PasswordInput(attrs={'class':'c1'})
)
password2 = fields.CharField(
error_messages = {'required':'确认密码栏不能为空'},
widget = widgets.PasswordInput(attrs={'class':'c1'})
)
def clean(self):
"""判断密码一致性,第二次输入的密码验证完毕后需要丢弃,不存数据库"""
try:
pwd = self.cleaned_data['password']
pwd2 = self.cleaned_data['password2']
if pwd == pwd2:
del self.cleaned_data['password2']
return self.cleaned_data
else:
from django.core.exceptions import ValidationError
self.add_error('password2',ValidationError('二次输入密码不一致'))
return self.cleaned_data
except KeyError as e:
return self.cleaned_data
def register(request):
if request.method == 'GET':
form = RegisterForm()
return render(request,'register.html',{'form':form})
else:
print (request.POST)
form = RegisterForm(request.POST)
#判断我们的form符不符合我们上述的规定
if form.is_valid():
#cleaned_data是我们提交的信息,以字典形式存在
print ('form.cleaned_data-->',form.cleaned_data)
models.Userinfo.objects.create(**form.cleaned_data)
#print (form.cleaned_data['password'])
#print (form.cleaned_data['password2'])
return HttpResponse('注册成功')
else:
print(form.errors)
return render(request,'register.html',{'form':form})
url.py路由:
url(r'^register', views.register),
templates中的html:
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" novalidate>
{% csrf_token %}
<p>用户名:{{ form.username }} {{ form.errors.username.0 }}</p>
<p>密码:{{ form.password }} {{ form.errors.password.0 }}</p>
<p>确认密码:{{ form.password2 }} {{ form.errors.password2.0 }}</p>
<input type="submit" value="注册">
</form>
</body>
</html>
注意此处使用了csrf,我们需要在setting.py中开放这一行代码
测试
http://127.0.0.1:8080/register
全部输入正确:
并且数据库会增加相应的字段。