总结django form

来源:互联网 发布:更新网络剧电视剧 编辑:程序博客网 时间:2024/04/30 00:38

总结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)、控制labelid

可以使用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

实例如下:

0 0
原创粉丝点击