在上一次的代码上做出进一步修改,使之能在页面上显示自定制的报错信息,并且使用form自动创建标签的功能。

views.py
  1. from django.shortcuts import render,HttpResponse
  2. from django import forms
  3. import json
  4. import re
  5. from django.core.exceptions importValidationError
  6. # Create your views here.
  7. def mobile_validate(value):
  8. mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
  9. ifnot mobile_re.match(value):
  10. raiseValidationError('手机号码格式错误')
  11. classInputForm(forms.Form):
  12. # 下面使用的变量名必须和html中input标签的name值相同
  13. # forms 的字段类型包括:IntegerField,CharField,URLField,EmailField,DateField等,但是没有手机号
  14. # required=True表示对输入做验证
  15. # error_messages 自定制提示信息
  16. username = forms.CharField(required=True, error_messages={'required':'用户名不能为空'})
  17. password = forms.CharField(required=True,
  18. min_length=6,
  19. max_length=10,
  20. error_messages={'required':'密码不能为空','min_length':'至少6位',
  21. 'max_length':'至多10位'}
  22. )
  23. num = forms.IntegerField(error_messages={'required':'不能为空','invalid':'必须是数字'})
  24. # 自定制验证方法关键就是参数validators,和自己的函数关联起来
  25. phone = forms.CharField(validators=[mobile_validate,],)
  26. def login(request):
  27. if request.POST:
  28. objPost =InputForm(request.POST)
  29. ret = objPost.is_valid()
  30. if ret:
  31. print(objPost.clean())
  32. # else:
  33. # # from django.forms.utils import ErrorDict
  34. # print(type(objPost.errors),objPost.errors.as_json())
  35. return render(request,'login.html',{'data': objPost})
  36. else:
  37. objGet =InputForm()
  38. return render(request,'login.html',{'data': objGet})
login.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .error-msg{
  8. color:red;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <form action="/login/" method="POST">
  14. <div>
  15. <div>
  16. {{ data.username }}
  17. {%if data.errors.username %}
  18. <span class="error-msg">{{ data.errors.username.0}}</span>
  19. {% endif %}
  20. </div>
  21. <div>
  22. {{ data.password }}
  23. {%if data.errors.password %}
  24. <span class="error-msg">{{ data.errors.password.0}}</span>
  25. {% endif %}
  26. </div>
  27. <div>
  28. {{ data.num }}
  29. {%if data.errors.num %}
  30. <span class="error-msg">{{ data.errors.num.0}}</span>
  31. {% endif %}
  32. </div>
  33. <div>
  34. {{ data.phone }}
  35. {%if data.errors.phone %}
  36. <span class="error-msg">{{ data.errors.phone.0}}</span>
  37. {% endif %}
  38. </div>
  39. <input type="submit" value="提交"/>
  40. </div>
  41. </form>
  42. </body>
  43. </html>
效果图:

 上面这个图的提示应该是django 1.10 版本 新增

循序渐进PYTHON3(十三) --2-- DJANGO之FORM表单(自动生成HTML标签和自定制提示信息)的更多相关文章

  1. Django 之 form表单

    Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...

  2. Django的form表单

    html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...

  3. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  4. 转载:Django之form表单

    转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...

  5. Django--分页器(paginator)、Django的用户认证、Django的FORM表单

    分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...

  6. [oldboy-django][2深入django]老师管理 -- form表单如何生成多选框标签,多选框的默认值显示,以及多选框数据插入到数据库,多选框数据更改到数据库

    1 form表单如何生成多选框(包含了多选框可选择内容) - Form设置班级输入框为 select多选 - 多选 class TeacherForm(Form): name = fields.Cha ...

  7. 循序渐进Python3(十三) --0-- django之form表单

    django为我们提供了form表单验证功能,下面来学习一下: 武sir博客:http://www.cnblogs.com/wupeiqi/articles/5246483.html  创建了djan ...

  8. django之form表单验证

    django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...

  9. django中form表单的提交:

    一,关于表单: 表单在百度百科的解释:   表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

随机推荐

  1. 【asp.net mvc】 扩展 htmlhelper 实现分页

    参考文档:http://www.cnblogs.com/caofangsheng/p/5670071.html                  http://www.cnblogs.com/arte ...

  2. ZooKeeper文档(二)

    ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...

  3. 数据结构:hash_map

    在C++11以上的开发环境中,请直接把map替换成unordered_map,不要使用hash_map 之前我们专门有一篇介绍哈希表,多维哈希表的博文,当时就是以map举例子,然后说了一句把map替换 ...

  4. LightOJ 1218 概率水题(几何分布)

    题意:给你一个n面骰子,问你投出所有面需要的次数的期望值是多少. 题解:放在过去估计秒解,结果现在自己想好久,还查了下,有人用极限证明...实际上仔细想想这种情况投出与前面不一样的概率p的倒数就是次数 ...

  5. PowerDesigner16 修改表或表的字段Name的时候不让Code不自动跟着变

    在修改表或表的字段Name的时候不让Code不自动跟着变,设置如下: tools-> General   Options-> Dialog 去掉勾选 Name To Code mirror ...

  6. 【BZOJ】2151 种树

    [算法]贪心+堆 [题意]n个数字的序列,要求选择互不相邻的k个数字使和最大. [题解] 贪心,就是按一定顺序选取即可最优,不会反悔. 考虑第一个数字选择权值最大的,那么它相邻的两个数字就不能选择,那 ...

  7. LTC 钱包部署

    基础环境 系统: CentOS 7.x nodejs: v4.6.0 zeromq: 4.x 安装nodejs + zeromq 基础依赖 yum install -y gcc make gcc-c+ ...

  8. A Simple Math Problem(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 思路:矩阵快速幂模板题,不过因为刚刚入门矩阵快速幂,所以经常把数组f存反,导致本地错误一晚,差点 ...

  9. 大聊Python----SocketServer

    什么是SocketServer? SocketServer的最主要的作用是实现并发处理,也就是可以多个用户同时上传和下载文件. socketserver模块简化了编写网络服务器的任务. sockets ...

  10. python中BeautifulSoup模块

    BeautifulSoup模块是干嘛的? 答:通过html标签去快速匹配标签中的内容.效率相对比正则会好的多.效率跟xpath模块应该差不多. 一:解析器: BeautifulSoup(html,&q ...