当前位置 : 主页 > 编程语言 > python >

Django(part46)--form表单验证

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考 文章目录 ​​form表单验证​​ ​​举个例子​​ form表单验证 form提供表单和字段验证,我们可以使用​​form.is_valid()​​ 方法进行表单验证,若该方法返回值为

学习笔记,仅供参考



文章目录

  • ​​form表单验证​​
  • ​​举个例子​​



form表单验证



form提供表单和字段验证,我们可以使用​​form.is_valid()​​ 方法进行表单验证,若该方法返回值为True,则表示当前表单合法,若返回值为False,则说明表单验证出现问题。

注意!这里,以及下面的form指的是forms.Form类的对象。



举个例子



我们基于上一个Blog里的mywebsite_bookstore项目,举一个例子来学习form表单验证。



如果我们没有进行表单验证操作,那么,当我们进行注册时,姓名可以填写任意格式和任意长度的数据,这显然不符合一般的填写要求,且不方便我们处理:

Django(part46)--form表单验证_django

为了使用户规范的填写注册信息,我们需要进行表单验证,即不按照规范进行信息填写,就注册不成功

在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/发起请求,并填写符合要求的注册信息:

Django(part46)--form表单验证_django_02

点击注册,显示表单提交成功:

Django(part46)--form表单验证_python_03

当我们填写的用户名大于12个字符时,再点击注册,Django就会提示我们验证失败:

Django(part46)--form表单验证_form表单_04



【文章转自日本多IP站群服务器 http://www.558idc.com/japzq.html提供,感恩】
上一篇:Django(part47)--文件上传
下一篇:没有了
网友评论