Django(part46)--form表单验证
程序员文章站
2022-03-07 19:44:55
...
学习笔记,仅供参考
form表单验证
form提供表单和字段验证,我们可以使用form.is_valid()
方法进行表单验证,若该方法返回值为True,则表示当前表单合法,若返回值为False,则说明表单验证出现问题。
注意!这里,以及下面的form指的是forms.Form类的对象。
举个例子
我们基于上一个Blog里的mywebsite_bookstore项目,举一个例子来学习form表单验证。
如果我们没有进行表单验证操作,那么,当我们进行注册时,姓名可以填写任意格式和任意长度的数据,这显然不符合一般的填写要求,且不方便我们处理:
为了使用户规范的填写注册信息,我们需要进行表单验证,即不按照规范进行信息填写,就注册不成功
在userinfo应用下的views.py模块中,我们对视图函数test_form进行修改,增加一个表单验证功能:
def test_form(request):
if request.method == "GET":
myform = forms.RegForm()
#创建对象
return render(request, 'userinfo/test_form.html',
locals())
elif request.method == "POST":
myform = forms.RegForm(request.POST)
if myform.is_valid():
#检验表单中数据是否合法
print(myform.cleaned_data)
#输出表单类中所有属性值组成的字典
return HttpResponse("<h2>表单提交成功!</h2> <br>" + str(myform.cleaned_data))
else:
return HttpResponse("<h2>表单数据验证失败!</h2>")
注意!若想要myform.is_valid()
方法返回True,则需要下面3个条件同时验证成功:
- 对
forms.xxxField()
方法中的参数值进行验证,验证成功返回None,验证失败抛出forms.ValidationError
异常 - 对
form.clean_属性名(self)
方法中的属性
进行验证,验证成功返回属性值
,验证失败抛出forms.ValidationError
异常 - 对
form.clean(self)
方法(表单的整体结构)进行验证,验证成功返回self.cleaned_data
,验证失败抛出forms.ValidationError
异常
现在,我们编辑forms.py,添加两个方法,进行验证:
# -*- coding: utf-8 -*-
from django import forms
class RegForm(forms.Form):
username = forms.CharField(label = "输入昵称")
password = forms.CharField(label = "输入密码",
widget=forms.PasswordInput)
passwordRepeat = forms.CharField(label = "再次输入密码",
widget=forms.PasswordInput)
tele = forms.CharField(label = "手机号", required = False)
email = forms.CharField(label = "邮箱", required = False,
widget=forms.EmailInput)
#<input type="text">
def clean_username(self):
#对单个属性进行检验
username = self.cleaned_data["username"]
if (len(username) < 6) | (len(username) > 12):
raise forms.ValidationError("用户名必须在6~12个字符之间!")
return username
def clean(self):
#属性之间进行检验(整体检验)
pwd1 = self.cleaned_data["password"]
pwd2 = self.cleaned_data["passwordRepeat"]
if pwd1 != pwd2:
raise forms.ValidationError("两次输入不一致!")
return self.cleaned_data
注意,views.py模块中test_form视图方法里的is_valid()
方法会自动调用clean_username
函数和clean
函数。
我们向http://127.0.0.1:8000/userinfo/test_form/发起请求,并填写符合要求的注册信息:
点击注册,显示表单提交成功:
当我们填写的用户名大于12个字符时,再点击注册,Django就会提示我们验证失败: