Django 拥有自己独立的表单功能块, 可以完成:
1, 表单的定义
2, 表单的校验
3, 表单的前端样式
等功能, 方便我们开发, 那么接下来, 我们看一下表单的定义
首先我们确定我们要编写的功能, 一个提供给博客的访客发送自己的联系方式的功能. 并且搭建相对应的数据库
- from django.db import models
- class Connection(models.Model):
- con_name = models.CharField(max_length = 32,verbose_name = "联系人姓名")
- con_phone = models.CharField(max_length=32, verbose_name="联系人姓名")
- con_email = models.EmailField(verbose_name="联系人姓名")
- def __str__(self):
- return "%s : %s"%(self.con_name,self.con_email)
表单的定义
form 表单的定义通过 Django 下面的 form 类进行定义, 过程和 Django 的模型定义类似, 首先在 App 目录当中创建 form 定义的专属文件 form.py, 然后开始我们的编写.
常用的表单定义方法有两种:
1, 常规定义, 我们按照与 model 模型定义类似的定义方法定义表单
- #coding:utf-8
- from django import forms
- class ConnectionForm(forms.Form):
- con_name = forms.CharField(max_length = 32,label = "联系人姓名")
- con_phone = forms.CharField(max_length=32, label="联系人姓名")
- con_email = forms.EmailField(label="联系人姓名")
这样我们就定义了一个表单, 这个表单和上面讲课用的联系人表单的效果是一模一样的. 当然惯用 form 字段里面常用的字段和对应的参数, 也给大家列出 来:
常用的字段
1,charfield 对应单行输入框
2,booleanfield 对应 checkbox 选择框
3,choicefield 对应下拉菜单选择框重要参数 choice
4,datafield 对应一个单行输入框, 但是会自动转化为日期类型
5,emailfield 对应输入框, 自动验证是否是邮件地址
6,filefield 对应文件上传选项
7,filepathfiled 对应一个 (文件组成的下拉菜单) 选择, 必须参数 path=''. 选项为这个地址里边所有的文件. 可选参数 recursive=True 是否包含子文件夹里的文件
8,imagefield 图片上传按钮. 需要 pillow 模块
9,urlfield 对应输入框 自动验证是否为网址格式
字段常用的参数
1,rqeuired 字段是否为必填 默认为 True
2,label 类似于输入框前边的提示信息
3,initial 初始值 (占位符) 就是给出一个默认值
4,help_text 字段的辅助描述
5,error_message={}覆盖{{form.name.error}}信息
6,disable 字段是否可以修改
7,widget 负责渲染网页上 html 表单的输入元素和提取提交的原始数据.
8,max_length 最大长度
9,min_length 最小长度
2, 对应 Django 模型定义
为了保证我们定义的表单模型和数据库提交模型的一致性, 我们可以通过 Form 表单类当中嵌套元类 Meta 来实现通过模型快速的定义表单
- #coding:utf-8
- from django import forms
- from Article.models import Connection #首先导入要对接的数据库
- class ConnectionForm(forms.ModelForm): #注意, 我们现在继承的是 ModelForm 而不是 Forms
- class Meta: #这是一个元类
- model = Connection #指定 models 对应的模型
- fields = ["con_name","con_phone","con_email"] #指定显示的字段
当然, 这么简单的代码只能完成最简单的效果, 我们还需要一些常用的参数
1,fields 要展示的字段, 接收的是一个列表, 如果不写默认是 models 的所有字段
2,exclude 不要展示的字段, 接收的是一个列表, 排除的字段, 默认没有
3,widgets 是一个模型字段的名称对应的样式的字典
4,labels 是一个模型字段的名称对应的标签的字典
5,help_texts 是一个模型字段的名称对应的帮助文档的字典
6,error_messages 是一个模型字段的名称对应的错误提示的字典
这种写法使用的比较少, 举一个例子来看看对应 Django 模型定义表单的参数使用
- #coding:utf-8
- from django import forms
- from Article.models import Connection #首先导入要对接的数据库
- class ConnectionForm(forms.ModelForm): #注意, 我们现在继承的是 ModelForm 而不是 Forms
- class Meta: #这是一个元类
- model = Connection #指定 models 对应的模型
- fields = ["con_name","con_phone","con_email"] #指定显示的字段
- widgets = {
- "con_name": forms.TextInput(attrs = {"style":"font-size:20px;"}),
- "con_phone": forms.TextInput(attrs={"style": "font-size:20px;"}),
- "con_email": forms.TextInput(attrs={"style": "font-size:20px;"})
- } #指定对应标签的样式
来源: http://www.bubuko.com/infodetail-2809430.html