19 - Form表单验证

1. 创建forms.py工具

# 和数据库没有任何关系,用来验证用户输入是否满足要求,需要和模板中参数名一致
# 用户自定义表单
from django import forms
from django.core.exceptions import ValidationError
class RegisterForm(forms.Form):
# 和数据库没有任何关系,用来验证用户输入是否满足要求,需要和模板中参数名一致
# required=True:必须输入
username = forms.CharField(min_length=3, required=True, error_messages={
'required': "用户名必须输入",
'min_length': "用户名最小3个字符"
})
password = forms.CharField(min_length=6, required=True, error_messages={
'required': "密码必须输入",
'min_length': "密码最小6个字符"
})
confirm = forms.CharField(min_length=6, required=True, error_messages={
'required': "密码必须输入",
'min_length': "密码最小6个字符"
})
regtime = forms.DateTimeField(required=False, error_messages={
'invalid': '日期格式错误',
})
sex = forms.BooleanField(required=False)
# 单个字段验证: clean_xxx
def clean_password(self):
password = self.cleaned_data.get("password")
if password and password.isdigit():
raise ValidationError("密码不能是纯数字")
return password
#
# 全局验证
def clean(self):
password = self.cleaned_data.get("password", None)
confirm = self.cleaned_data.get("confirm", '')
print(password, confirm)
if password != confirm:
raise ValidationError({"confirm": "两次密码不一致"})
return self.cleaned_data

2. views中验证

def register(request):
if request.method == "POST":
# 用提交的数据生成表单
form = RegisterForm(request.POST) # 调用forms
# 能通过验证返回True,否则返回False
if form.is_valid():
# 进行业务处理
data = form.cleaned_data
data.pop("confirm")
# 获取指定字段
# username = form.cleaned_data.get('username', '')
# print(username, data)
# 如果forms中表单的字段名和models模型字段名一致
res = User.objects.create(**data)
if res:
return HttpResponse("注册成功")
else:
# 验证不成功,把错误信息渲染到前端页面
return render(request, "register.html", {"form": form})
return render(request, "register.html")

3. 前端提交表单和展示错误信息

<body>
<form action="{% url 'App04:register' %}" method="post">
{% csrf_token %}
用户名:<input type="text" name="username">
{% for error in form.username.errors %}
{{ error }}
{% endfor %}
<br>
密码:<input type="password" name="password">
{{ form.password.errors }}
<br>
确认密码:<input type="password" name="confirm">
{{ form.confirm.errors }}
<br>
注册时间:<input type="text" name="regtime">
{{ form.regtime.errors }}
<br>
性别:<input type="radio" name="sex" value="0">
<input type="radio" name="sex" value="1">
{{ form.sex.errors }}
<br>
<input type="submit" value="注册">
</form>
</body>
posted @   测试圈的彭于晏  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示