Templates(二)form表单与模板分离

Django的Forms类的作用是把用户输入的数据转化成Python对象格式,便于后续操作(比如修改,验证)。
 
-使用form类而不是在模版中写表单的优点
1.所有的表单在一个文件里,非常便于后期维护,比如增添或修订字段。
2.forms.py可通过clean方法自定义表单验证,非常便捷
 
 
1.自定义表单
在app目录下创建forms.py文件。类似于模型,Django表单也由各种字段组成。表单可以自定义(forms.Form),也可以由模型Models创建(forms.ModelForm)
 
-关于ModelForm
一般情况下,model和form是分开的(遵循松耦合的原则)。django中的ModelForm类支持在模型中创建表单。能不用尽量不用,因为违背了松耦合的核心思想
 
-class LoginForm(forms.Form):
 
2.表单的实例化
form = LoginForm(),实例化一个空表单,但里面没有任何数据,可以通过 {{ form }}在模板中渲染。如果需要实例化一个带有数据的表单对象,使用data参数添加数据,form = LoginForm(data=request.POST)
 
-在模板中渲染
 
 
3.使用form类的视图函数的工作流程
 
(1)通过url调用view视图
(2)若通过GET方式访问,会调用一个空表单对象,来渲染出空的POST表单,并提交回来
(3)将POST得到的数据实例化到表单对象。通过is_vaild()函数(调用form类中的校验函数);校验数据是否合法,若合法则会序列化一个字典
 
*4.表单校验
每个form的类都可以通过clean方法验证表单。如果只想对某些字段进行验证,通过[clean_字段名]方式自定义函数进行表单验证(因为is_valid()默认自动调用这种名称形式的检验函数,所以函数名是固定的)
 
* is_valid()的原理
源自:
1is_valid()先检验是否包含errors信息(从模板传来)。若错误信息不为空,直接返回为False;否则执行(2
2is_valid()方法将数据返回到表单类cleaned_data属性,以key-value形式存在。(这一步没有校验,只有数据的传递)
(3)is_valid()调用校验函数,校验后返回某值(通过校验)或者抛出异常(没通过校验)
 
 
*5.文件上传——使用表单上传
与发送普通字段相似
(1)在forms.py中,设置表单的字段
file = forms.FileField(label=‘文件’, widget=forms.FieldInput)。一般表单不能只上传一个文件,通常还要有其他字段,assist=forms.Field(label=‘’, widget=forms.HiddenInput, required=False)。这样可以实现“只上传文件”(只是看不到,而不是没有)
(2)在模版文件中
<form>字段上必需有属性enctype="multipart/form-data",否则表单不能发送文件,request.FILES为空。
(3)在views.py中接收并检验上传的文件
form = UploadForm(request.POST, request.FILES)接收文件用request.FILES。其余校验等过程,与表单普通字段一样
 
 
6.widget参数
Django forms的每个字段都可以选择输入widget,比如多选,复选框,and so on。还可以定义每个widget的css属性。用于页面的美化

猜你喜欢

转载自www.cnblogs.com/xiaoqichaoren/p/12942139.html
今日推荐