form组件
校验型组件:form组件
组件有很多,就类似于功能模块
无论是post请求还是get请求,页面都能够获取到字典
只不过get请求来的时候,字典值都是空的
而post请求来之后,字典可能有值
1手动书写前端获取用户数据的html代码
2后端对用户数据进行校验
3对不符合要求的数据进行前端提示
forms组件能够完成的事情
1渲染html代码
2校验数据
3展示提示信息
数据校验非要去后端,不能在前端利用js直接完成
数据校验在前端可有可无
但是后端必须要有
因为前端的校验是弱不禁风的,你可以直接修改
或者利用爬虫程序绕过前端页面直接朝祸端提交数据
数据校验
from django import forms
class MyForm( forms.Form ):
username = forms.CharField( min_length=3,max_length=8)
password = forms.CharField( min_length=3,max_length=8)
1测试环境的准备,可以自己拷贝代码准备
2其实pycharm里面已经帮你准备一个测试环境,Python connole
from app01 import views
//1将带校验的数据组织成字典的形式传入即可
form_obj = views.MyForm('username' : 'jason' , 'password':123 )
//2判断数据是否合法
form_obj . is_valid()
//3检验所有通过的数据
form_obj . cleaned_data
//4查看所有不符合校验规则以及不符合的原因
form_obj . errors
//5校验数据只校验类中出现的字段,多穿不影响,多穿字段被忽略
//6校验数据,默认情况下类里面的所有字段都必须传值
渲染标签
forms组件只会自动帮你渲染用户输入的标签(input select checkbox)
不会帮你渲染提交按钮
def index( request ):
//1先产生一个空对象
form_obj = MyForm ( )
//2直接将该空对象传递给html页面
return render( request,' index.html ' , locals( ) )
前端利用空对象做操作
1代码书写极少,封装程度太高,不便后续的扩展,一般情况下只在本地测试
{ { form_obj . as_p } }
{ { form_obj . as_ul } }
{ { form_obj . as_table } }
2可扩展性很强,但是需要书写的代码太多,一般情况下不用
{ { form_obj . username . label } } : { { form_obj . username } }
3代码书写简单,并且扩展性也高
{ % for form in form_ibj % }
{ { form . label } } : { { form } }
< span > { % forms.errors.0 % } < /span >
{ % endfor % }
label属性默认展示的是类中字段首字母大写的形式
也可以自己做修改,直接给该字段对象加label属性即可
展示提示信息
1数据获取繁琐
2校验数据需要构造成字典的格式传入
request.POST可以看成一个字典
3校验数据
form_obj = MyForm( request . POST )
4判断数据是否合法
if form_obj . is_valid( ):
5如果合法,操作数据存储数据
不合法,有错误
1必备的条件,get请求和post传给html页面对象变量必须一致
2组件当你的数据不合法的情况下,会保存你上次的数据,让你基于之前
的结果进行修改,更加人性化
钩子函数(HOOK)
在类方法书写即可
在特定的节点自动触发完成响应操作
钩子函数在forms组件中就类似第二道关卡,能够让我们自定义校验规则
在forms组件中有两类钩子
1局部钩子: 当你需要给某个字段增加校验的规则的时候可以使用
2全局钩子: 当你需要给多个字段增加校验的规则的时候可以使用
def clean_username( self ):
//获取用户字段
username = self . cleaned_data . get( 'username' )
if '666' in username:
//提示前端展示错误信息
self . add_error('username','不能有这个名字')
//将钩子函数钩出去的数据最放回去
return username
forms组件其他参数及补充知识点
label 字段名
error_message 报错信息
initial 默认值
required 控制字段是否必填
validator
widget 属性
针对字段的校验有很多种
1简单的min_length
2正则validator
3钩子函数
1字段没有样式
2针对不同的类型的input如何修改
text
password
data
radio
checkbox
多个属性的话,直接空格隔开即可
其他渲染