Django Form的学习
django.forms 是Django处理form的库
- 通过form类的定义自动生成html
- 自己validate提交的数据
- 重新呈现form表单
- 将form的数据转换成python的数据类型
整体介绍
Form对象
处理form中的上传文件
处理form中的数据
在template中使用form
使用循环输出form
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{# Include the visible fields #}
{% for field in form.visible_fields %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Send message" /></p></form>
Form部分Api
Form class
| api | 类型 | 作用 | 备注 |
| is_bound | 属性Boolean | 检查当前form是否已经绑定数据 | |
| is_valid() | 方法Boolean | 执行校验器,检查form中的数据是否符合定义规则 | |
| errors | 属性dict | 存放错误信息 | 当form绑定数据以后,调用is_valid或者errors都回导致validate的执行。而且只会执行一次。不管以后调用多少次 |
| initial | 属性 | 给form中的字段初始化 |
在初始化的调用方式f = ContactForm(initial={'subject': 'Hi there!'}),当然也可以在field中指定
forms.CharField(initial='class')。两者的优先级是:后者生效 |
| fields | 属性 | 获取form的字段信息 |
另外拥有base_fields 这个属性,是整个Python进程的所有form的 instance共享的,如果更改其中内容。所有同一form的instantce都会 |
| cleaned_data | 属性 | 获取form中的安全数据 |
即使form出错。也可以获取其中正确的内容。而且同时包括Optional的字段 |
| as_table() default、as_ul()、as_p() | 方法 | 获取form生成的html | |
| required_css_class、error_css_class | 属性 | 设定默认的css和错误的css | eg.
<tr class="required"><th><label for="id_subject">Subject:</label> ... |
| auto_id | 属性 | 设置html的生成id方式 |
三种值:False:不生成label标签和input的id值 True:生成label标签而且直接使用field的name作为id值 "xxx_%s":生成label标签。而且id的前缀为xxx_ 。。 ps:如果第三不加入%s。则当成True来处理。默认的处理方式是"id_%s" |
| label_suffix | 属性 | 在label的值后面出现的字符串 |
默认为: 自己设置—>等符号 |
| is_multipart | 方法 | 检测这个form是否需要multipart |
检查是否添加enctype="multipart/form-data" |
| prefix | 属性 | 一般用于同一Form区别namespace用 |
bound field class
| api | 类型 | 作用 | 备注 |
| errors | 属性list | 获取当前绑定字段的错误 | |
| label_tag(contents=None, attrs=None, label_suffix=None) | 方法Str | 获取当前字段的生成的label_tag | |
| css_classes() | 方法Str | 获取或者设置当前字段的渲染的css | 参数带值就是设置。没就是设置 |
| values() | 方法 | 获取当前字段的值 | |
| id_for_label | 字段的id | 只读当前label的id | 设置使用
my_field = forms.CharField(widget=forms.TextInput(attrs={'id': 'myFIELD'}))
|
field class
| api | 类型 | 作用 | 备注 |
| clean(value) | 方法 | 执行validate,如果成功输出clean 的Str,如果失败抛出Error | |
| required | 属性 | 如果设置为True,则需要设置此值 | |
| label | 属性 | 设置输出的html中label标签里面的值 | |
| inital | 属性 | 初始化值,仅在第一次初始化的时候调用 | |
| widget | 属性 | 可以自定义widget | |
| help_text | 属性 | 在渲染的时候会放在渲染字段的后面 | |
| error_messages | 属性 | 传入一个dict重写错误的消息 | eg. name = forms.CharField(error_messages={'required': 'Please enter your name'}) |
| validators | 属性 | 设置当前字段的校验器 | |
| localize | 属性 | 或者本地化字段 |
上传文件
- 将form类型设置为enctype="multipart/form-data"
使用request.FILES来初始化即可 f = ContactFormWithMugshot(request.POST, request.FILES) 字段
根据model生成Form
可以通过model并指定字段直接生成form,避免重复声明
eg.
class ArticleForm(ModelForm):
... class Meta:
... model = Article
... fields = ['pub_date', 'headline', 'content', 'reporter']
对应表:
| Model field | Form field |
|---|---|
| AutoField | Not represented in the form |
| BigIntegerField | IntegerField with min_value set to -9223372036854775808 andmax_value set to 9223372036854775807. |
| BooleanField | BooleanField |
| CharField | CharField with max_length set to the model field’s max_length |
| CommaSeparatedIntegerField | CharField |
| DateField | DateField |
| DateTimeField | DateTimeField |
| DecimalField | DecimalField |
| EmailField | EmailField |
| FileField | FileField |
| FilePathField | FilePathField |
| FloatField | FloatField |
| ForeignKey | ModelChoiceField (see below) |
| ImageField | ImageField |
| IntegerField | IntegerField |
| IPAddressField | IPAddressField |
| GenericIPAddressField | GenericIPAddressField |
| ManyToManyField | ModelMultipleChoiceField (see below) |
| NullBooleanField | CharField |
| PositiveIntegerField | IntegerField |
| PositiveSmallIntegerField | IntegerField |
| SlugField | SlugField |
| SmallIntegerField | IntegerField |
| TextField | CharField with widget=forms.Textarea |
| TimeField | TimeField |
| URLField | URLField |
PS:
- If the model field has blank=True, then required is set to False on the form field. Otherwise, required=True.
使用方法:
modelForm save方法:可以直接保存到database如果出错也会抛出Error ,如果save(commit=False),则只会创建对象不会提交,可以继续修改
modelForm,中如果要指定相应field的属性可以通过meta指定
eg.
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}
help_texts = {
'name': _('Some useful help text.'),
}
error_messages = {
'name': {
'max_length': _("This writer's name is too long."),
},
}
也可以通过字段设置,eg.
class ArticleForm(ModelForm):
headline = MyFormField(max_length=200, required=False,
help_text="Use puns liberally") class Meta:
model = Article
fields = ['headline', 'content']
modelform_factory
可以在运行时动态使用factory生成modelform 不需要事先声明。 eg.BookForm = modelform_factory(Book, fields=("author", "title"))
Formset
可以生产同一个form的set,并获取值 使用方式:
def manage_authors(request):
AuthorFormSet = modelformset_factory(Author)
if request.method == 'POST':
formset = AuthorFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
# do something.
else:
formset = AuthorFormSet()
return render_to_response("manage_authors.html", {
"formset": formset,
})
Form assert
可以设定form需要的资源eg.
class CalendarWidget(forms.TextInput): class Media:
css = {
'all': ('pretty.css',)
}
js = ('animations.js', 'actions.js')
Django Form的学习的更多相关文章
- django form使用学习记录
Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API ...
- Django学习笔记之Django Form表单详解
知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...
- Django学习笔记之Django Form表单
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Django 2.0 学习(07):Django 视图(进阶-续)
接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...
- django: form fileupload - 1
本节介绍 Form 中一些字段类型的使用,以文件上传字段 FileField 为例:(注,其它字段和相关用法见官方文档中的 Forms -> Built-in Fields) 一,配置 urls ...
- django form表单验证
一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...
- Django form模块使用心得
最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在f ...
- Python Web框架篇:Django Form组件
Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...
- Django form表单
Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...
随机推荐
- 《算法导论》习题解答 Chapter 22.1-4(去除重边)
思路:重开一个新图,按着邻接列表的顺序从上到下遍历,每遍历一行链表前,清空visited数组,如果没有访问过这个元素,则加入新图,如果已经访问过了(重边),则不动. 伪代码: 复杂度:O(V+E) f ...
- Ngnix 安装、信号量、虚拟主机配置
ngnix的安装很简单 1.先从ngnix官网下载ngnix压缩包 wget http://nginx.org/download/nginx-1.6.2.tar.gz 2.解压并进入其目录 tar - ...
- 不错的jQuery图表插件 .
很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,更好地帮助决策分析.今天就给大家分享几个个人觉得好用的jQuery图表插件,这几个图表插件使用起来非常方便,而且挺灵活的,相信大 ...
- python 基础——装饰器
python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...
- Delphi单元文件之-防止程序重复执行
//工程引用此单元就能防止同时出现多个实例unit MultInst;interfaceuses Windows ,Messages, SysUtils, Classes, Forms;impleme ...
- Oracle数据库作业-5 查询
14.查询所有学生的Sname.Cno和Degree列. select t.sname,c.cno,c.degree from student t inner join score c on t.sn ...
- MVC datetime? & datetime 设置格式
设置datetime的格式,直接有方法重载进行,即使数据为datetime?格式 设置起始时间在配置的时候添加设置 $('#closeTime').datetimepicker({ language: ...
- SqlServer知识总结
SqlServer查询表的列数 select count(*) from sysobjects a join syscolumns b on a.id=b.id where a.name='表名' 在 ...
- QA在网站建设中的作用
在网站建设项目中,有一个团队负责产品测试并识别产品中的缺陷是很有意义的.问题在于,不应该只依赖这个团队来发现所有的缺陷,就像航空公司不能只依靠空乘人员确保飞机安全一样.这个观点的核心是一个简单的事实, ...
- js、expression表达式解析
首先理解一下下面的表达式:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeigh ...