总结django form
总结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相关推荐
- python提交表单无效_使用Django Form解决表单数据无法动态刷新的两种方法
一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为"多对多" from django.db import models class Class ...
- Django form表单
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- [py][mx]django form验证-给db减压
django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...
- Django Form和ModelForm组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...
工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取. form.py为: class objectF ...
- Django - Form和ModelForm
一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 <! ...
- python下拉菜单_自定义Django Form中choicefield下拉菜单选取数据库内容实例
工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取. form.py为: class objectF ...
- Django form模块使用心得
http://forreal.blog.51cto.com/3205122/586035 最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建 ...
- django - form
django - form 在对应的应用下新建一个 forms.py from django.forms import forms 编写一个类,继承 forms.Form form 表单的2个作用 生 ...
最新文章
- JSON Web Token - 在Web应用间安全地传递信息
- log_sum_exp
- sql server:alter database name
- k8s:服务发现Service
- 网页上有错误(类不能支持 Automation 操作)解决方法
- EJB之JPA(UUID与TABLE影射策略)
- Box 'laravel/homestead' could not be found.
- 第一季1:HI3518EV200的体验
- 2021“鲜美生活”新趋势:中国食品行业白皮书
- php投影,box-shadow实现不同角度的投影
- Java连接mysql数据库的方式_java连接MySQL数据库的方式
- Ubuntu下 UltraEdit 破解/显色
- 关于如何职业规划和选择换工作
- 树莓派仿真器R语言下载
- 比 Excel 更强大,Python 的可视化库 Altair 入门
- 大学计算机基础方案一,《大学计算机基础》实验实施方案-学生用汇.docx
- 2018-NIPS-论文网址
- c语言里op,57-赋值语句中的op=形式
- 【虚拟试衣论文】Generating High-Resolution Fashion Model Images Wearing Custom Outfits
- 风控基础——风控模型、规则、策略的区别