总结django form
一、django forms
1、特点
django forms是Django的表单处理库。依赖HttpRequest,它具有如下特点:
(1)快速自动生成HTML表单;
(2)表单数据校验;
(3)错误信息提示;
(4)自动转换为python数据格式;
2、探究form类
#coding=utf-8
#forms.py
from django import forms
class ContactForm(forms.Form):
name =forms.CharField(max_length=30)
age = forms.IntegerField()
email =forms.EmailField(required=False)
为每一个将要处理的HTML的``<Form>`` 定义一个Form类,表单中的每一个字段(域)作为Form类的属性,被展现成Field类,如果指定非必填可required=False。
(1)、form类所做的就是第一步就是快速生成html代码,如下:
(2)、数据校验与错误信息提示
创建form对象,传入字典类型数据
(3)、转换处理
如果form对象的数据合法,则有cleaned_data属性,一个清理过的提交数据字典。
当然。我们也可以在其生成的html表单中,看到原始效果
二、Forms API
1、绑定和未绑定(unbound)表单的区别
Form.is_bound
相同点:
(1)、都是表单实例
(2)、都可以生成html表单代码
(3)、都有相关属性方法
不同点:
(1)、绑定的表单,有绑定的数据,可以验证,renderingthe form as HTML with the data displayed in the HTML.
(2)、未绑定的表单,不能验证,为空或默认值。
绑定空数据
那么如果在post表单数据,则可以这样绑定:
2、Form.initial表单初始化。
我认为就是给表单绑定一些数据,用于特定显示或处理。当然这些可有可无,如提示等。如果提供,则是包含表单字段的字典类型。如:
可以在表单类中初始化,也可以在表单对象中初始化,对于同一个字段的初始化,后者覆盖前者。
对于这种初始化,在前端显示也有涉及,如:
则在页面显示如下,
注意:
These values are onlydisplayed for unbound forms, and they’re not used as fallback values if aparticular value isn’t provided.
3、Form.cleaned_data
始终要明白,当通过一系列的数据来创建表单对象,并验证通过的时候,就要使用cleaned_data属性进行‘清理工作’,所谓的清理就是对给定的数据对应到python类型。返回的是一组被清理过的字典类型数据。
4、自定义样式
这里的样式是自动生成的html代码样式,如各个表单控件的id,错误标签的class等。最初如下:
那么现在有3个疑问?:
(1)、能否改变错误类
(2)、能否改变id
(3)、能否去掉label
针对以上三点,一一解答:
(1)、自定义验证样式类:
如果验证不通过,则会输出错误,对应的有“必需”、‘错误’两项,那么就在这两项中做文章。
如:
Bydefault, forms use django.forms.util.ErrorList toformat validation errors.
如果想换一种方式,可以自定义错误显示
(2)、控制label和id
可以使用auto_id变量控制label和id ,auto_id必须为True、False或字符串。
如果auto_id = True 则会自动使用label,且id名称为 它们的字段名
auto_id使用格式化字符串(%s)
通过上面我们知道,默认的auto_id使用格式化字符串 auto_id= 'id_%s'
接下来控制Label后缀,通过label_suffix 进行控制
三、自定义表单模板
1、单个显示
{{form.字段名}}显示对应的字段
{{form.字段名.errors}}显示字段对应的错误提示
2、循环输出
同时可以一次循环输出所有表单字段
在以上循环中{{field}}是绑定字段的实例,它也具有如下属性:
{{field.label}}:字段标签,不含html代码,如:Name
{{field.label_tag}}:含html代码的字段标签,如<label id="id_name">Name:</label>
{{field.html_name}}:字段的html名称,如:name、age
{{field.help_text}}:字段帮助文本
{{field.errors}}:字段错误列表,可循环
3、对于表单的可见与不可见
可以使用hidden_fields() and visible_fields()
对于不可见的表单字段就不显示错误信息提示,对于可见的就正常显示,如下:
4、重复使用
如果多个模板重复使用一个表单,则可以使用{%include 'xxx.html ' %}(假设xxx.html代码中含有该表单)
四、深入表单类
从一个django model中创建表单类(formmodel)
这是一个趋势,djangomodel与 formmodel紧密的结合。
(1)、字段类型的对应,djangomodel的字段类型对应到form的字段类型,这里列举一下几个重要的:
(2)、对应的属性
如果model 字段 有blank=True,则表单类中对应的要 required=False,否则required=True
表单字段的 label 被设置为modelfield的 verbose_name 且第一个字符大写.
表单字段的 help_text 对应models field的 help_text
如果model 字段有choices 则表单字段widget 设置 Select
实例如下: