Django学习手册 - Form 插件
- """
- 核心:
- from django import forms
from django.forms import fields
from django.forms import widgets
- class table_name(forms.Form)
- 自定义字段名 = fields.字段数据类型(字段参数)
- 字段数据类型:
- 基本字段:
- fields.CharField() #字符串类型
- fields.IntegerField() #整型类型
- fields.FloatField() #浮点类型
- fields.EmailField() #邮箱
- fields.DecimalField() #自定义浮点类型
- 自参数:
- max_digits=20 #总长度
- decimal_places=20 #小数长度
- #文件类型
- #html form上传时,enctype="multipart/form-data" ,views 中 request.FILES
- fields.ImageField() #图片上传按钮。需要pillow模块
- fields.filefield() #文件上传选项
- fields.filepathfiled() #对应一个(文件组成的下拉菜单)选择,必须参数path=''.选项为这个地址里边所有的文件。
可选参数recursive=True是否包含子文件夹里的文件- #日期/时间
- fields.DateField() #日期,格式:2015-09-01
- fields.TimeField() #时间,格式:11:11
- fields.DateTimeField() #日期时间,2000-01-01 11:11
- fields.DurationField() #时间间隔,%d %H:%M:%S.%f
- #IP地址
- fields.GenericIPAddressField() #ip地址类型
- #选择框
- fields.booleanfield() #checkbox选择框
- fields.ChoiceField() #choice类型 单选框(返回的值为字符串)
- fields.MultipleChoiceField() #choice类型 多选框 多值为列表(返回的值为字符串)
- 自参数:
- choices=[(1,'A'),(2,'B'),(3,'C')]
- fields.TypedChoiceField() #choice类型 单选框(返回的值可定制)
- fields.TypedMultipleChoiceField() #choice类型 多选框 多值为列表(返回的值可定制)
- 自参数:
- coerce = lambda x : int(x)
- choices=[(1,'A'),(2,'B'),(3,'C')]
- #自定制
- fields.RegexField() #自定义属性
- 自参数:
- regx #自定义正则表达式
- FORM 字段参数:
- required=True, #必填
- max_length=20, #最大值
- min_length=5, #最小值
- error_messages="required":'不能为空!'}, #错误信息
- label="用户名" #标签名
- initial="请输入用户名" #默认值
- show_hidden_initial=True/False #隐藏,且保存上次数据(检测两次输入)
- validators=[] #自定制验证规则
- localsize=True/False #是否支持本地化
- disabled =True/False #是否能编辑
- widget #定制HTML插件
- 1.自定义显示html type
- 2.设置参数属性值
- 3.设置css样式
- """
示例:
- from django import forms
- from django.forms import fields
- from django.forms import widgets
- class TestTorm(forms.Form):
- user = fields.CharField(required=True,#必填
- error_messages={"required":'不能为空!'},
- label="用户名",
- )
- age = fields.IntegerField(required=True,
- label="年龄",
- error_messages={
- "required":'不能为空!',
- "min_value":"太小了",
- 'max_value':'太老了'
- },
- min_value=18,
- max_value=50)
- email = fields.EmailField(required=True,label="邮箱",error_messages={"required":'不能为空!'})
- choice = [(1, 'A'), (2, 'B'), (3, 'C')]
- aaa = fields.TypedChoiceField(choices=choice)
- # 通过widget 自定制方式
- aab = fields.CharField(widget=widgets.Select())
- # 通过__init__ 实时获取数据库的数据 传递给前端页面
- def __init__(self,*args,**kwargs):
- from app01 import models
- super(TestTorm,self).__init__(*args,**kwargs)
- self.fields['aab'].widget.choices= models.Userinfo.objects.values_list('uid','uname')
- #实例化时,传递值
- # obj = TestTorm('可以以字典方式设置默认值')
views 页面:(导入TestTorm,然后实例化,然后将实例传递至前端)
- from django.shortcuts import render,HttpResponse
- from app01.tests import TestTorm
- # Create your views here.
- def index(request):
- if request.method == 'GET':
- obj = TestTorm()
- # obj = TestTorm('可以以字典方式设置默认值')
- return render(request, 'index.html',{'obj':obj})
- else:
- obj = TestTorm(request.POST)
- return render(request, 'index.html', {'obj': obj})
obj = TestTorm(request.POST) 获取前端提交的字段,验证是否符合,不符合即 错误字段提示
前端页面
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <div>
- {#不同的生成方式一#}
- <form method="post" action="/index/" novalidate >
- {#novalidate 不加载 #}
- <li>{% csrf_token %}</li>
- <p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
- <p>{{ obj.age.label }}{{ obj.age }}{{ obj.errors.age.0 }}</p>
- <p>{{ obj.email.label }}{{ obj.email }}{{ obj.errors.email.0 }}</p>
- <p>{{ obj.aaa.label }}{{ obj.aaa }}{{ obj.errors.aaa.0 }}</p>
- <p>{{ obj.aab.label }}{{ obj.aab }}{{ obj.errors.aab.0 }}</p>
- <li><input type="submit" class="tijiao" value="提交"></li>
- </form>
- {#不同的生成方式:二 生成整表#}
- <form method="post" action="/index/" novalidate >
- {{ obj.as_p }}
- {#p标签形式#}
- </form>
- <form method="post" action="/index/" novalidate >
- {{ obj.as_table }}
- {#table标签形式#}
- </form>
- <form method="post" action="/index/" novalidate >
- {{ obj.as_ul }}
- {#ul标签形式#}
- </form>
- </div>
- </body>
- </html>
自定制
- 以上要不满足需求还可以自定制:
- widget
- 1.自定义显示html type
- 2.设置参数属性值 attr={'class':'classname'}
- 3.设置css样式 attr={'study':'classname'}
- # 先导入这个模块
- from django.forms import widgets
- # 参数 格式
- 自定义字段名 = fields.字段数据类型(widget=widgets.插件(参数:attr={'class':'classname'}))
- choice = [(1, 'A'), (2, 'B'), (3, 'C')]
- aab = fields.CharField(widget=widgets.Select(choices=choice))
数据过滤定制:(导入模块,定制规则和提示)
- from django.core.validators import RegexValidator
- class TestTorm(forms.Form):
- pwd = fields.CharField(
- required=True,
- label="密码",
- error_messages={
- "required": '不能为空!'},
- widget=widgets.PasswordInput(attrs={ 'placeholder': "请输入密码"}),
- validators=[RegexValidator(r"[0-9]+",'必须为数字'),
- RegexValidator(r"^177", '必须为177开头')])
渲染问题
为什么Django传递至前端的 字符串能正常渲染成HTML标签,不是要加{{ | safe }} 才可以显示的吗?????
- python 通过拼接字符串然后传递至前端页面渲染成HTML标签
- 前有学过在 {{text | safe }} 即可渲染
- Django中可以:
- from django.utils.safestring import mark_safe
- text = mark_safe(text) 再传递至前端也可以达到效果
Django学习手册 - Form 插件的更多相关文章
- Django学习之Form表单
一.Form介绍 普通方式手写注册功能 使用form组件实现注册功能 二.Form那些事儿 1.常用字段与插件 initial error_messages password radioSelect ...
- django学习之- Form
参考:http://www.cnblogs.com/wupeiqi/articles/6144178.htmlFORM中的字段只对post上来的数据进行form验证,主要涉及:字段 和 插件字段:对用 ...
- Django学习手册 - 登录验证码
生成验证码函数 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = " ...
- Django学习手册 - ORM数据类型
DOM 字段/参数 配置格式: Module.字段(参数) 常用的字段归纳: 数字 models.AutoField() 自增列(int),必须设置为主键 models.IntegerField() ...
- Django学习手册 - 前端input数据获取
view获取数据方法归纳: #请求meta数据 request.mata(...) request.method(POST,GET,PUT) #从meta里面获取数据 request.path_inf ...
- Django学习手册 - cookie / session
cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...
- Django学习手册 - 正则URL路由配置/路由分发
############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...
- Django 学习手册 - 下载数据库表格(XLS/CSV)
下载XLS表格方式: 前置: 需要安装xlwt模块 views : def export_users_xls(request): response = HttpResponse(content_typ ...
- Django学习手册 - 基于requests API验证(二)
原理分析: API接口验证 1.一个认证的key server端 和 client端都必须有这么一个认证key. 2.认证登录的时间限定 3.保存已验证的信息,在以后的验证不能再次登录 client ...
随机推荐
- KMP之计算Next数组
KMP的Next数组:模式串的前缀与后缀的“相交”长度 KMP算法步骤: 1.先算next数组 2.若失配(此时模式串下标为j),利用Next数组求出失配后滑动的新位置 a.Next[j] \geq ...
- Linux设备树(二 节点)
二 节点(node)的表示 首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”.@前边是节点名字,后边是节点地址.节点名字的 ...
- 110道python面试题
1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 s ...
- 一名全栈设计师的Mac工具箱(设计,开发,效率)
我喜欢把自己定义为一个会一些设计的全栈工程师.在一些大型企业项目中,我一般担任架构师的角色,而到了我自己负责的个人或开源项目中,我就成了一名全栈设计师.我喜欢用自学而来的那些设计技能进行网站或 ...
- oracle中的insert all into,在mysql中的写法
oracle中的insert all into表示插入多条数据,mysql中可以采用: INSERT INTO表名(字段1,字段2..) values <foreach collection=& ...
- python正则提取关键字
python使用正则表达式提取关键字 import sys reload(sys) sys.setdefaultencoding("utf-8") import re ss = & ...
- centos之Too many open files问题-修改linux最大文件句柄数
linux服务器大并发调优时,往往需要预先调优linux参数,其中修改linux最大文件句柄数是最常修改的参数之一. 在linux中执行ulimit -a 即可查询linux相关的参数,如下所示: [ ...
- ruby select 方法,可用于先查询结果后,再次用条件限制
1. 用于条件过滤 @works=DworkPro.all.order(:work_type) @work_pro=@works.select{ |x| x.job_type == 7} 2. sel ...
- java读大文件最快性能【转】
java读大文件最快性能 完全引用自: 几种读大文件方法的效率对比测试 据说1.88g只要5秒左右,未亲测. /** * 读大文件 * BufferedReader + char[] * @throw ...
- 关于selenium的那些坑
selenium 辅助工具 splinter 总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位 ...