"""
核心:
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 插件的更多相关文章

  1. Django学习之Form表单

    一.Form介绍 普通方式手写注册功能 使用form组件实现注册功能 二.Form那些事儿 1.常用字段与插件 initial error_messages password radioSelect ...

  2. django学习之- Form

    参考:http://www.cnblogs.com/wupeiqi/articles/6144178.htmlFORM中的字段只对post上来的数据进行form验证,主要涉及:字段 和 插件字段:对用 ...

  3. Django学习手册 - 登录验证码

    生成验证码函数 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = " ...

  4. Django学习手册 - ORM数据类型

    DOM 字段/参数 配置格式: Module.字段(参数) 常用的字段归纳: 数字 models.AutoField() 自增列(int),必须设置为主键 models.IntegerField() ...

  5. Django学习手册 - 前端input数据获取

    view获取数据方法归纳: #请求meta数据 request.mata(...) request.method(POST,GET,PUT) #从meta里面获取数据 request.path_inf ...

  6. Django学习手册 - cookie / session

    cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...

  7. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  8. Django 学习手册 - 下载数据库表格(XLS/CSV)

    下载XLS表格方式: 前置: 需要安装xlwt模块 views : def export_users_xls(request): response = HttpResponse(content_typ ...

  9. Django学习手册 - 基于requests API验证(二)

    原理分析: API接口验证 1.一个认证的key server端 和 client端都必须有这么一个认证key. 2.认证登录的时间限定 3.保存已验证的信息,在以后的验证不能再次登录 client ...

随机推荐

  1. 转:upload.parseRequest为空

    上传是items一直是空list.导致原因是struts2把原始的原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最 ...

  2. Unity 着色器基础知识

    一.着色器基础知识 着色器通过代码模拟物体表面发生的事情,其实就是GPU中运行的一段代码. 着色器的类型: 顶点着色器.片元着色器.无光照着色器.表面着色器.图像特效着色器.计算着色器. 坐标空间: ...

  3. 4.2、LED1、LED2交替闪烁

    #include "ioCC2530.h" //引用CC2530头文件 /***************************************************** ...

  4. eclipse 中新建文件报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Buil

    在eclipse中新建文件报错错误提示如下: The superclass "javax.servlet.http.HttpServlet" was not found on th ...

  5. python模块之os模块

    os模块 用途:调用封装好的方法调用操作系统的功能,处理文件和目录,OS模块不受平台限制. os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用 ...

  6. Java Web 开发必须掌握的三个技术:Token、Cookie、Session

    在Web应用中,HTTP请求是无状态的.即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session. Cookie Cookie ...

  7. C++ 二维数组作为形参传递使用实例

    在线代码编辑器: http://codepad.org/ 1.*指针 void display(int *arr, const int row, const int col) { ; i < r ...

  8. Maccms8.x 命令执行漏洞分析

    下载链接https://share.weiyun.com/23802397ed25681ad45c112bf34cc6db 首先打开Index.php $m = be('get','m'); m参数获 ...

  9. IP简介(一)

    1. OSI模型 TCP是TCP/IP的第三层传输层,对应OSI的第四层传输层: IP是TCP/IP的第二层互联层,对应OSI的第三层网络层. TCP属于OSI中的运输层它是面向连接的协议: IP属于 ...

  10. Oracle的 listagg() WITHIN GROUP ()函数使用

    1.使用条件查询  查询部门为20的员工列表 -- 查询部门为20的员工列表    SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = ...