一、Form组件:
django框架提供了一个form类,来处理web开发中的表单相关事项。众所周知,form最常做的是对用户输入的内容进行验证,为此django的forms类提供了全面的内容验证和保留用户上次输入数据的支持。
form组件有2大大功能
对用户提交的内容进行验证(form表单/Ajax)
保留用户上次输入的内容
1、对用户提交的数据进行验证
form组件验证的原理
1.obj=Form()form组件类实例化时找到类中所有的字段 把这些字段 变成组合成字典;
self.fields={‘user’:正则表达式1,‘pwd’:正则表达式2}
2.循环self.fields字典(自己写的字段)
for k,v in self.fields.items():
K是user,pwd
v是正则表达式
3.每次循环通过self.fields字典的键, 一个一个的去get前端POST提交的数据 得到用户输入数据;
input_value= request.post.get(‘k’)(所以form字段的名称,要和前端的name属性匹配)
4.每次拿到用户输入的数据 (input_value)和进行正则表达式匹配;
5.匹配成功flag=True 匹配失败flag=falsh,最后 return flag obj.is_valid=flag。
如果For自带的规则和正则满足不了验证需求,可在Form类中自定义方法,做扩展。
6.每个字段验证通过后,每个字段执执行self.clean_filelds函数(自定义 对Form类中的字段做单独验证,比如去数据库查询判断一下用户提交的数据是否存在?)
7. 执行Form组件的clean_form方法进行整体验证!(既然每个字段都验证了,就可以对用户提交的数据做整体验证了!比如进行联合唯一的验证)
8.最后执行类似 clean_form的post_clean方法结束验证。(一般不使用post_clean做自定义过滤,clean_form方法完全可以解决)
form表单提交验证(form表单(会发起 get)提交刷新失去上次内容)
from django.shortcuts import render,HttpResponse,redirect from django.forms import Form from django.forms import fields class Login(Form): #from验证规则 用户名 6-10字符 required不能为空 name=fields.CharField(max_length=10, min_length=6, required=True, error_messages={ 'required':'用户名不能为空', #error_messages参数 自定义错误信息 'min_length':'太短了', 'max_length': "太长了", } ) # z注意name 必须和 from表单提交的一致,要么二则怎么对比校验呢 pwd= fields.CharField(min_length=3, required=True, error_messages={ 'required': '密码不能为空', # error_messages参数 自定义错误信息 'min_length': '太短了', 'max_length': "太长了", } ) def index(request): if request.method=='GET': return render(request,'login.html') else: obj=Login(request.POST) #把客户端提交来的form表单和 和匹配规则放在一起 res=obj.is_valid() #自动校验 给出结果 True 或者 False if res: #验证成功后obj.cleaned_data获取成功的数据,字典类型正好对应数据 的批量操作 print(obj.cleaned_data) return redirect('http://www.baidu.com') #obj.errors获取错误信息(对象类型)就可以传到前端显示了! else: return render(request,'login.html',{'obj':obj})