案例程序:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/fm/" method="POST"> #3个输入框分别是user/pwd/email
{% csrf_token %}
<input type="text" name="user" />
<input type="text" name="pwd" />
<input type="text" name="email" />
<input type="submit" value="提交" />
</form>
</body>
</html>

views函数:

from django import forms   # 首先需导入forms包

class FM(forms.Form):     #建立一个验证类
user = forms.CharField(error_messages={'required': '用户名不能为空'}) #自定制的中文错误返回
pwd = forms.CharField(
max_length='12',
min_length='8',
error_messages={'required': '密码不能为空', 'max_length': '密码最大长度不能大于12', 'min_length': '密码最小长度不能小于8'}
)
email = forms.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'}) def fm(request):
if request.method == "GET":
return render(request, 'fm.html')
elif request.method == "POST":
# 获取用户的所有数据
# 每条数据请求的验证
# 成功:获取所有的正确信息
# 失败:显示错误信息
obj = FM(request.POST) #生成一个表单验证类
r1 = obj.is_valid() #验证输出的结果 成功为true 错误为false
print(r1)
if r1:
print(obj.cleaned_data) #如果成功返回验证好的数据并打印
else:
print(obj.errors.as_json) #如果失败返回错误信息打印
return redirect('/fm/')

显示的信息:

达到了自定制返回的错误信息为中文的目的

向前端送出验证错误信息:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/fm/" method="POST">
<p><input type="text" name="user" /> {{ obj.errors.user.0 }} </p> #前端显示验证错误信息
<p><input type="text" name="pwd" /> {{ obj.errors.pwd.0 }} </p>
<p><input type="text" name="email" /> {{ obj.errors.email.0 }} </p>
<input type="submit" value="提交" /> </form>
</body>
</html>
def fm(request):
if request.method == "GET":
obj = FM()
return render(request, 'fm.html', {'obj': obj}) # 传送一个验证数据对象obj
elif request.method == "POST":
# 获取用户的所有数据
# 每条数据请求的验证
# 成功:获取所有的正确信息
# 失败:显示错误信息
obj = FM(request.POST)
r1 = obj.is_valid()
print(r1)
if r1:
print(obj.cleaned_data)
else:
print(obj.errors)
return render(request, 'fm.html', {'obj': obj})
return render(request, 'fm.html')

完整的注册页面的简单表单验证加注册:

def fm(request):
if request.method == "GET":
obj = FM()
return render(request, 'fm.html', {'obj': obj})
elif request.method == "POST":
obj = FM(request.POST)
r1 = obj.is_valid()
if r1:
models.UserInfo.objects.create(**obj.cleaned_data) #直接一条语句数据注册成功
else:
return render(request, 'fm.html', {'obj': obj})
return render(request, 'fm.html')

  

使用forms类生成字段和html标签:

from django.forms import widgets  # widgets是生成html标签的插件
from django.forms import fields  # 在定义forms类时建议最好使用fields来表示字段
class FM(forms.Form):
user = fields.CharField(error_messages={'required': '用户名不能为空'}, # 自定义错误
widgets=widgets.Textarea(attrs={'class': 'c1'}),#调用插件widgets 然后生成Textarea标签(多行文本输入框) 然后添加属性attrs(class=c1)
)
pwd = fields.CharField(
max_length='12',
min_length='8',
error_messages={'required': '密码不能为空', 'max_length': '密码最大长度不能大于12', 'min_length': '密码最小长度不能小于8'},
widgets=widgets.PasswordInput(attrs={'class': 'c2'}), #调用插件widgets 然后生成PasswordInout标签(多行文本输入框) 然后添加属性attrs(class=c2)
) email = fields.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})

  

生成的标签:

Django-website 程序案例系列-16 modle.form(表单验证)的更多相关文章

  1. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  2. web框架-(六)Django补充---form表单验证

    一.form表单验证 1. 常规html页面的form表单验证 常规页面中,如果想实现对表单中用户输入信息的数据验证,需要配合Ajax来实现. 使用前我们先来熟悉下函数参数:request,其中包含的 ...

  3. django之form表单验证

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

  4. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  5. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  6. Django中的Form表单验证

    回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...

  7. 第三百一十一节,Django框架,Form表单验证

    第三百一十一节,Django框架,Form表单验证 表单提交 html <!DOCTYPE html> <html lang="en"> <head& ...

  8. Django基础之Form表单验证

    Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...

  9. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

随机推荐

  1. 浅析单点登录,以及不同二级域名下的SSO实现

    一家公司有多个产品线,就可能要有多个子域名,下头以baidu域名为例,a.baidu.com, b.baidu.com.com 是顶级域名,baidu 就是一个二级域名,a和b就是子域名. 当用户在a ...

  2. 液晶屏MIPI接口与LVDS接口区别(总结)

    液晶屏接口类型有LVDS接口.MIPI DSIDSI接口(下文只讨论液晶屏LVDS接口,不讨论其它应用的LVDS接口,因此说到LVDS接口时无特殊说明都是指液晶屏LVDS接口),它们的主要信号成分都是 ...

  3. LiveCharts文档-3开始-7标签

    原文:LiveCharts文档-3开始-7标签 LiveCharts文档-3开始-7标签 Label就是Chart中表示数值的字符串,通常被放置在轴的位置和提示当中. 下图中的这些字符串显示的都是标签 ...

  4. Docker 小记 — Docker Engine

    前言 用了 Docker 方才觉得生产环境终于有了他该有的样子,就像集装箱普及之后大型货轮的价值才逐渐体现出来,Docker 详细说明可查阅"官方文档".本篇为 Docker En ...

  5. libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案

    线上一台服务器在执行leveldb程序的时候,报错:"libc.so.6: version `GLIBC_2.14' not found". 排查原因及解决方法如下: 1)产生原因 ...

  6. Onezero团队第三次站立会议随感

    >首先这是一个关于Android的小应用APP(记账本) >在Java基础薄弱的基础上尝试Android开发,让我感觉力不从心. >说实话本迭代周在程序设计,确实让我头疼,不知道怎么 ...

  7. 撰写POPUSH需求文档

    不当家不知柴米贵,撰写了正规的软件需求文档才知道软件工程的复杂性 感谢@洪宇@王需@江林楠下午的加班加点,五个人正闷在406B奋斗中,加油!

  8. [2019BUAA软件工程]第1次阅读作业

    [2019BUAA软件工程]第1次阅读作业 Tips Link 作业连接 [2019BUAA软件工程]第1次阅读作业 读<构建之法>的疑惑 个人开发流程(Personal Software ...

  9. 语音笔记:MFCC

    一,传统语音识别体系结构 二,MFCC特征提取 MFCC(Mel-frequency cepstral coefficients):梅尔频率倒谱系数.梅尔频率是基于人耳听觉特性提出来的, 它与Hz频率 ...

  10. div+css实现圆形div以及带箭头提示框效果

    .img{ width:90px; height:90px; border-radius:45px; margin:0 40%; border:solid rgb(100,100,100) 1px;& ...