使用 forms 模块处理表单
使用 forms 模块处理表单
1、forms 模块的作用
通过 forms 模块,允许将表单与class相结合,可以自动的生成表单控件
2、使用 forms 模块
1、创建 forms.py 文件
2、导入 forms
from django import forms
3、创建 class,一个class对应一个表单
必须继承自 forms.Form类
4、在class中创建属性
一个属性对应着一个表单控件
(参考文档)
3、在模板中解析 form 对象
1、注意
1、需要自定义<form>
2、需要自定义 提交按钮
2、解析方式
1、手动解析
在视图中创建 xxForm() 并发送到模板中
ex:
form = RemarkForm()
return render(request,'xx.html',locals())
手动解析:
模板中:
{% for field in form %}
{{field.label}} : 控件前的文本
{{field}} : 表示控件
{% endfor %}
2、自动解析
1、{{form.as_p}}
将表单中的每个属性都解析成一个p标记,再显示标签以及控件
2、{{form.as_ul}}
将表单中的每个属性都解析成一个li标记,再显示标签以及控件
注意:需要自定义<ul></ul> 或 <ol></ol>
3、{{form.as_table}}
将表单中的每个属性都解析成一个tr标记,再显示标签以及控件
注意:需要自定义<table>
4、使用 forms.Form 获取表单数据
1、通过 forms.Form 子类的构造函数,接受post数据
form = xxxForm(request.POST)
2、需要让 form 通过验证后再取值
form.is_valid()
返回true:提交的数据已经通过所有验证,允许获取表单数据
返回false:提交的数据有暂时未通过验证的
3、获取表单提交的数据
通过 form.cleaned_data(字典)接收提交的数据
cd = form.cleaned_data
print(cd['subject']) #获取提交数据中subject对应的数据
练习:
1、在 forms.py 中追加一个 RegisterForm 类
2、增加以下属性,并生成到 06_register.html显示成表单控件
1、uname :文本框
2、upwd :密码框
3、uemail :邮件框
4、uage :文本框
3、在 06_register.html中追加 form 和 submit
4、点击提交按钮时,将数据插入到数据库中
创建库 day6 ,创建Models - Users
5、forms 的高级处理
将 Models 和 Forms 结合到一起使用
1、在 forms.py中,创建class,继承自 forms.ModelForm
2、创建内部类 :Meta,关联Form 和 Models
1、model : 指定要关联的Model类是谁
2、fields :从models中取哪些字段要生成控件
1、取值 "__all__",取出全部字段生成控件
2、指定一个列表,声明允许生成控件的字段名
3、labels : 指定每个属性关联的label,取值为字典
labels = {
'属性名1':'label文本1',
'属性名2':'label文本2',
}
内部小部件
1、小部件
小部件(widget),表示生成到页面中的空间的类型以及其他属性
2、常用小部件
1、TextInput : type='text'
2、NumberInput : type='number'
3、EmailInput : type='email'
4、URLInput : type='url'
5、PasswordInput : type='password'
6、HiddenInput : type="hidden"
7、CheckboxInput : type='checkbox'
8、Textarea : <textarea></textarea>
9、Select : <select></select>
3、小部件的使用
1、继承自 forms.Form
1、基本版
属性 = forms.CharField(
label='xxx',
widget=forms.小部件类型
)
ex:
upwd = forms.CharField(
label='用户密码',
widget=forms.PasswordInput
)
2、高级版
属性=forms.CharField(
label='标签',
widget=forms.小部件类型(
attrs={
'属性名1':'属性值1',
'属性名2':'属性值2',
}
)
)
2、继承自 forms.ModelForm
class WidgetForm(forms.ModelForm):
class Meta:
model = Users
fields = '__all__'
labels = {
'属性1':'标签1',
'属性2':'标签2',
}
widgets={
'属性1':forms.小部件类型(attrs={
})
}
- python使用cgi模块处理表单
- 使用JSF处理表单验证
- Python:使用getopt模块处理命令行参数[zt]
- PHP中使用php://input处理相同name值的表单数据
- 使用HTTP模块扩展 ASP.NET 处理
- tomcat7.0使用servlet处理jsp表单(form)的web.xml配置
- jQuery使用之(四)处理页面的表单元素
- 使用commons-fileupload后,servlet如何处理表单
- Enterprise Library3.1 使用数据访问模块时,调用Microsoft.Practices.EnterpriseLibrary.Data报出源文件与当前应用程序不一致和创建dataconfiguration的配置节处理程序出错
- 使用 Nginx 和 GeoIP 模块来处理不同国家的访问
- 在python中使用cx_Oracle模块出现“DLL Load failed”的处理方法
- 【单独编译使用WebRTC的音频处理模块 - android】
- 【php】使用重定向,伪装表单处理页面不存在
- 举例详解Python中smtplib模块处理电子邮件的使用
- 基于表单数据的封装,泛型,反射以及使用BeanUtils进行处理
- asp.net Forms表单验证 使用经验及验证流程分析
- 当您通过使用 InfoPath 2010 表单连接到 Web 服务时沙盒中处理的代码包含的、 不返回的数据或您收到一条错误消息
- 使用HTTP模块扩展 ASP.NET 处理
- Web.py Cookbook 简体中文版 - 怎样使用表单 forms
- 在python中使用cx_Oracle模块出现“DLL Load failed”的处理方法