1. """
  2. 核心:
  1. from django import forms
    from django.forms import fields
    from django.forms import widgets
  1. class table_name(forms.Form)
  2.   自定义字段名 = fields.字段数据类型(字段参数)
  3.  
  4. 字段数据类型:
  5.  
  6. 基本字段:
  7. fields.CharField() #字符串类型
  8. fields.IntegerField() #整型类型
  9. fields.FloatField() #浮点类型
  10. fields.EmailField() #邮箱
  11. fields.DecimalField() #自定义浮点类型
  12. 自参数:
  13. max_digits=20 #总长度
  14. decimal_places=20 #小数长度
  15.  
  16. #文件类型
  17. #html form上传时,enctype="multipart/form-data" ,views 中 request.FILES
  18. fields.ImageField() #图片上传按钮。需要pillow模块
  19. fields.filefield() #文件上传选项
  20. fields.filepathfiled() #对应一个(文件组成的下拉菜单)选择,必须参数path=''.选项为这个地址里边所有的文件。
                       可选参数recursive=True是否包含子文件夹里的文件
  21.  
  22. #日期/时间
  23. fields.DateField() #日期,格式:2015-09-01
  24. fields.TimeField() #时间,格式:11:11
  25. fields.DateTimeField() #日期时间,2000-01-01 11:11
  26. fields.DurationField() #时间间隔,%d %H:%M:%S.%f
  27.  
  28. #IP地址
  29. fields.GenericIPAddressField() #ip地址类型
  30.  
  31. #选择框
  32. fields.booleanfield() #checkbox选择框
  33.  
  34. fields.ChoiceField() #choice类型 单选框(返回的值为字符串)
  35. fields.MultipleChoiceField() #choice类型 多选框 多值为列表(返回的值为字符串)
  36. 自参数:
  37. choices=[(1,'A'),(2,'B'),(3,'C')]
  38. fields.TypedChoiceField() #choice类型 单选框(返回的值可定制)
  39. fields.TypedMultipleChoiceField() #choice类型 多选框 多值为列表(返回的值可定制)
  40. 自参数:
  41. coerce = lambda x : int(x)
  42. choices=[(1,'A'),(2,'B'),(3,'C')]
  43.  
  44. #自定制
  45. fields.RegexField() #自定义属性
  46. 自参数:
  47. regx #自定义正则表达式
  48.  
  49. FORM 字段参数:
  50. required=True, #必填
  51. max_length=20, #最大值
  52. min_length=5, #最小值
  53. error_messages="required":'不能为空!'}, #错误信息
  54. label="用户名" #标签名
  55. initial="请输入用户名" #默认值
  56. show_hidden_initial=True/False #隐藏,且保存上次数据(检测两次输入)
  57. validators=[] #自定制验证规则
  58. localsize=True/False #是否支持本地化
  59. disabled =True/False #是否能编辑
  60. widget #定制HTML插件
  61. 1.自定义显示html type
  62. 2.设置参数属性值
  63. 3.设置css样式
  64. """

示例:

  1. from django import forms
  2. from django.forms import fields
  3. from django.forms import widgets
  4.  
  5. class TestTorm(forms.Form):
  6. user = fields.CharField(required=True,#必填
  7. error_messages={"required":'不能为空!'},
  8. label="用户名",
  9. )
  10. age = fields.IntegerField(required=True,
  11. label="年龄",
  12. error_messages={
  13. "required":'不能为空!',
  14. "min_value":"太小了",
  15. 'max_value':'太老了'
  16. },
  17. min_value=18,
  18. max_value=50)
  19. email = fields.EmailField(required=True,label="邮箱",error_messages={"required":'不能为空!'})
  20. choice = [(1, 'A'), (2, 'B'), (3, 'C')]
  21. aaa = fields.TypedChoiceField(choices=choice)
  22. # 通过widget 自定制方式
  23. aab = fields.CharField(widget=widgets.Select())
  24.  
  25. # 通过__init__ 实时获取数据库的数据 传递给前端页面
  26. def __init__(self,*args,**kwargs):
  27. from app01 import models
  28. super(TestTorm,self).__init__(*args,**kwargs)
  29. self.fields['aab'].widget.choices= models.Userinfo.objects.values_list('uid','uname')
  30.  
  31. #实例化时,传递值
  32. # obj = TestTorm('可以以字典方式设置默认值')

views 页面:(导入TestTorm,然后实例化,然后将实例传递至前端)

  1. from django.shortcuts import render,HttpResponse
  2. from app01.tests import TestTorm
  3.  
  4. # Create your views here.
  5.  
  6. def index(request):
  7. if request.method == 'GET':
  8. obj = TestTorm()
  9. # obj = TestTorm('可以以字典方式设置默认值')
  10. return render(request, 'index.html',{'obj':obj})
  11. else:
  12. obj = TestTorm(request.POST)
  13. return render(request, 'index.html', {'obj': obj})

obj = TestTorm(request.POST) 获取前端提交的字段,验证是否符合,不符合即 错误字段提示

前端页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div>
  9. {#不同的生成方式一#}
  10. <form method="post" action="/index/" novalidate >
  11. {#novalidate 不加载 #}
  12. <li>{% csrf_token %}</li>
  13. <p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
  14. <p>{{ obj.age.label }}{{ obj.age }}{{ obj.errors.age.0 }}</p>
  15. <p>{{ obj.email.label }}{{ obj.email }}{{ obj.errors.email.0 }}</p>
  16. <p>{{ obj.aaa.label }}{{ obj.aaa }}{{ obj.errors.aaa.0 }}</p>
  17. <p>{{ obj.aab.label }}{{ obj.aab }}{{ obj.errors.aab.0 }}</p>
  18. <li><input type="submit" class="tijiao" value="提交"></li>
  19. </form>
  20.  
  21. {#不同的生成方式:二 生成整表#}
  22. <form method="post" action="/index/" novalidate >
  23. {{ obj.as_p }}
  24. {#p标签形式#}
  25. </form>
  26. <form method="post" action="/index/" novalidate >
  27. {{ obj.as_table }}
  28. {#table标签形式#}
  29. </form>
  30. <form method="post" action="/index/" novalidate >
  31. {{ obj.as_ul }}
  32. {#ul标签形式#}
  33. </form>
  34. </div>
  35. </body>
  36. </html>

自定制

  1. 以上要不满足需求还可以自定制:
  2. widget
  3. 1.自定义显示html type
  4. 2.设置参数属性值 attr={'class':'classname'}
  5. 3.设置css样式 attr={'study':'classname'}
  6. # 先导入这个模块
  7. from django.forms import widgets
  8. # 参数 格式
  9. 自定义字段名 = fields.字段数据类型(widget=widgets.插件(参数:attr={'class':'classname'}))
  10. choice = [(1, 'A'), (2, 'B'), (3, 'C')]
  11. aab = fields.CharField(widget=widgets.Select(choices=choice))

数据过滤定制:(导入模块,定制规则和提示)

  1. from django.core.validators import RegexValidator
  2. class TestTorm(forms.Form):
  3. pwd = fields.CharField(
  4. required=True,
  5. label="密码",
  6. error_messages={
  7. "required": '不能为空!'},
  8. widget=widgets.PasswordInput(attrs={ 'placeholder': "请输入密码"}),
  9. validators=[RegexValidator(r"[0-9]+",'必须为数字'),
  10. RegexValidator(r"^177", '必须为177开头')])

渲染问题

为什么Django传递至前端的 字符串能正常渲染成HTML标签,不是要加{{ | safe }} 才可以显示的吗?????

  1. python 通过拼接字符串然后传递至前端页面渲染成HTML标签
  2. 前有学过在 {{text | safe }} 即可渲染
  3. Django中可以:
  4. from django.utils.safestring import mark_safe
  5. 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. KMP之计算Next数组

    KMP的Next数组:模式串的前缀与后缀的“相交”长度 KMP算法步骤: 1.先算next数组 2.若失配(此时模式串下标为j),利用Next数组求出失配后滑动的新位置 a.Next[j] \geq ...

  2. Linux设备树(二 节点)

    二 节点(node)的表示 首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”.@前边是节点名字,后边是节点地址.节点名字的 ...

  3. 110道python面试题

    1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 s ...

  4. 一名全栈设计师的Mac工具箱(设计,开发,效率)

        我喜欢把自己定义为一个会一些设计的全栈工程师.在一些大型企业项目中,我一般担任架构师的角色,而到了我自己负责的个人或开源项目中,我就成了一名全栈设计师.我喜欢用自学而来的那些设计技能进行网站或 ...

  5. oracle中的insert all into,在mysql中的写法

    oracle中的insert all into表示插入多条数据,mysql中可以采用: INSERT INTO表名(字段1,字段2..) values <foreach collection=& ...

  6. python正则提取关键字

    python使用正则表达式提取关键字 import sys reload(sys) sys.setdefaultencoding("utf-8") import re ss = & ...

  7. centos之Too many open files问题-修改linux最大文件句柄数

    linux服务器大并发调优时,往往需要预先调优linux参数,其中修改linux最大文件句柄数是最常修改的参数之一. 在linux中执行ulimit -a 即可查询linux相关的参数,如下所示: [ ...

  8. ruby select 方法,可用于先查询结果后,再次用条件限制

    1. 用于条件过滤 @works=DworkPro.all.order(:work_type) @work_pro=@works.select{ |x| x.job_type == 7} 2. sel ...

  9. java读大文件最快性能【转】

    java读大文件最快性能 完全引用自: 几种读大文件方法的效率对比测试 据说1.88g只要5秒左右,未亲测. /** * 读大文件 * BufferedReader + char[] * @throw ...

  10. 关于selenium的那些坑

    selenium 辅助工具 splinter 总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位 ...