1.forms模块的作用
通过forms模块,允许将表单与class结合(表单与实体类结合),允许通过class生成表单
2.使用forms模块
1.在应用中创建 forms.py 文件
2.导入forms模块
from django import forms
3.创建class,一个class对应生成一个表单
class ClassName(forms.Form):
pass
4.创建属性
一个属性对应到表单中生成一个控件
class RemarkForm(forms.Form): #评论标题 # forms.CharField() - 文本框 # label : 控件前的文本标签 subject = forms.CharField(label='标题') #电子邮箱 # forms.EmailField() - Email框 # label : 控件前的文本标签 email = forms.EmailField(label='邮箱')
3.在模板中解析 form 对象
1.注意
在模板中,需要:
1.自定义 <form></form>
2.自定义 提交按钮
2.处理方法
1.在 views 中创建 form 的对象并发送到模板上
form = RemarkForm()
return render(request,'xxx.html',locals())
2.在模板中进行解析
1.手动解析
{% for field in form %}
{{field}} :
表示的就是form对象中的一个独立属性
表示的也就是一个独立的控件
{{field.label}}:
表示的是控件中的label的值
{% endfor %}
2.自动解析
1.{{form.as_p}}
将form对象中的每个属性使用p标记包裹起来再显示
2.{{form.as_ul}}
将form对象中的每个属性使用li标记包裹起来,再显示
注意:必须手动提供<ol> 或 <ul>
3.{{form.as_table}}
将form对象中的每个属性用tr标记包裹起来,再显示
注意:必须手动提供<table>
4.通过 forms.Form 获取表单数据 - POST
1.通过 forms.Form 的构造函数来接收post数据
form = xxxForm(request.POST)
2.必须使form通过验证后再获取数据
form.is_valid()
返回True:提交的数据以及表单已通过所有的验证,允许取值
返回False:未通过验证,则不能正常取值
3.获取表单中的数据
通过 form.cleaned_data 来获取提交的数据,返回的是一个字典。
#使用forms的对象来接收提交的数据 #1.将request.POST的数据提交给RemarkForm form = RemarkForm(request.POST) #2.让RemarkForm的对象通过验证 if form.is_valid(): #3.通过验证后再获取各个控件的值 cd = form.cleaned_data print(cd['email'],cd['subject'])
5.forms模块的高级处理
将 Models 和 Forms 结合到一起使用
1.在 forms.py 中创建 class ,继承自 forms.ModelForm
2.创建内部类Meta,去关联 Model
1.model : 指定要关联的实体类
2.fields : 指定从Model中取哪些字段生成控件
1.取值 "__all__",表示全部属性都要生成控件
2.取值 列表,声明允许生成控件的属性名
3.labels : 指定每个属性所关联的label,取值为字典
labels = {
'属性名':'label文本',
'属性名':'label文本',
}
4.widgets : 指定小部件
widgets = {
"属性1":forms.小部件类型(
attrs = {'属性':'值',}
),
}
class user(forms.ModelForm): class Meta: #指定关联的实体 model = Author #指定要显示的字段 fields = ['name','age','email'] #指定字段对应的标签 labels = {'name':'用户姓名','age':'用户年龄','email':'用户邮箱',} #指定字段对应的小部件 widgets = { 'age':forms.NumberInput( attrs = {'placeholder':'请输入年龄','class':'form-control',} ), 'email':forms.EmailInput( attrs = {'placeholder':'请输入您的电子邮箱','class':'form-control',} ) }
6.小部件的使用-widget
1.什么是小部件
小部件,表示的就是生成到网页上的控件类型以及其他的html属性
2.常用小部件类型
1.TextInput : type='text'
2.PasswordInput : type='password'
3.NumberInput : type='number'
4.EmailInput : type='email'
5.URLInput : type='url'
6.HiddenInput : type='hidden'
7.CheckboxInput : type='checkbox'
8.Textarea : <textarea></textarea>
9.Select : <select></select>
3.小部件的使用
1.继承自 forms.Form 类
指定控件类型的基础上还允许设置一些相关的HTML属性到控件上
属性 = forms.CharField(
label = '文本',
widget = forms.小部件类型(
attrs = {'html属性名':'属性值','html属性名':'属性值',}
)
)
2.继承自forms.ModelForm类:
5.forms模块的高级处理中以及举例子了。