总结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

实例如下:

总结django form相关推荐

  1. python提交表单无效_使用Django Form解决表单数据无法动态刷新的两种方法

    一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为"多对多" from django.db import models class Class ...

  2. Django form表单

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  3. [py][mx]django form验证-给db减压

    django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...

  4. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  5. python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...

    工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取. form.py为: class objectF ...

  6. Django - Form和ModelForm

    一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 <! ...

  7. python下拉菜单_自定义Django Form中choicefield下拉菜单选取数据库内容实例

    工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取. form.py为: class objectF ...

  8. Django form模块使用心得

    http://forreal.blog.51cto.com/3205122/586035 最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建 ...

  9. django - form

    django - form 在对应的应用下新建一个 forms.py from django.forms import forms 编写一个类,继承 forms.Form form 表单的2个作用 生 ...

最新文章

  1. JSON Web Token - 在Web应用间安全地传递信息
  2. log_sum_exp
  3. sql server:alter database name
  4. k8s:服务发现Service
  5. 网页上有错误(类不能支持 Automation 操作)解决方法
  6. EJB之JPA(UUID与TABLE影射策略)
  7. Box 'laravel/homestead' could not be found.
  8. 第一季1:HI3518EV200的体验
  9. 2021“鲜美生活”新趋势:中国食品行业白皮书
  10. php投影,box-shadow实现不同角度的投影
  11. Java连接mysql数据库的方式_java连接MySQL数据库的方式
  12. Ubuntu下 UltraEdit 破解/显色
  13. 关于如何职业规划和选择换工作
  14. 树莓派仿真器R语言下载
  15. 比 Excel 更强大,Python 的可视化库 Altair 入门
  16. 大学计算机基础方案一,《大学计算机基础》实验实施方案-学生用汇.docx
  17. 2018-NIPS-论文网址
  18. c语言里op,57-赋值语句中的op=形式
  19. 【虚拟试衣论文】Generating High-Resolution Fashion Model Images Wearing Custom Outfits
  20. 风控基础——风控模型、规则、策略的区别

热门文章

  1. 马云给程序员脱离单身的一些建议
  2. 【机器人】一转眼,波士顿动力 Atlas 机器人又会过独木桥了!|湾区人工智能...
  3. 只要沾上婚恋焦虑,她们就王者变青铜
  4. 面试造飞机,工作拧螺丝。
  5. 程序员的职业选择,你应该知道的,持续更新ing
  6. 网站前端,后端设计,系统设计常识
  7. Android平台五大特色
  8. android开花动画,15款界面最漂亮Android应用程序揭晓
  9. 李宁是怎么输给安踏的?
  10. 特斯拉下一代Roadster跑车生产时间再度推迟至2023年