(32)forms组件(数据校验)
forms组件的用处
1、就是用来做数据校验的
2、渲染页面
3、渲染错误信息(和局部刷新同效果)
数据校验
要使用forms组件必须要写一个类继承forms组件
urls.py
from bbs01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'register/$',views.RegForms.register),
]
views.py
from django.shortcuts import render,HttpResponse
from django import forms #导入forms组件 class RegForms(forms.Form):
'''写要校验的字段'''
name = forms.CharField(min_length=3,max_length=8) #forms.CharField()这是一个对象,就是用这个对象来校验name,最小长度3,最大长度8
pwd = forms.CharField(min_length=3,max_length=8)
re_pwd = forms.CharField(min_length=3,max_length=8)
email = forms.EmailField() #这个对象校验的必须是email格式
'''如果前端多传的字段,则再这里后端不会校验,多传的字段会被清洗掉
如果少传了,则会不通过校验
''' def register(request):
if request.method == 'GET':
return render(request,'register.html')
elif request.method == 'POST':
'''生成一个forms对象,传入一个字典'''
forms = RegForms(request.POST) #要检验数据的话,就要在实例化时候传入对象
'''调用forms对象'''
if forms.is_valid(): #调用is_valid校验,合法就是返回True,不合法就是返回False
'''cleaned_data清洗后的数据,就是通过的数据都存在这里面,是一个字典'''
print('这里就是清洗后的数据: ',forms.cleaned_data)
else:
'''errors也是一个字典,错误的数据放这里面'''
errors_dic = forms.errors
print(errors_dic) #这个列表是底层做过处理和拼接的,有点难看懂
print('这里就是错误的数据: ',forms.errors.as_data) #要查看这个错误的信息字典,要用errors.data,这样就可以看懂 return HttpResponse('。。。。。。。。。。。。。')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>用户名:<input type="text" name="name"></p>
<p>密码: <input type="password" name="pwd"></p>
<p>确认密码: <input type="password" name="re_pwd"></p>
<p>email: <input type="text" name="email"></p>
<p>xxx: <input type="text" name="xxx"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
渲染页面
渲染页面第一种方式
urls.py
from bbs01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'register/$',views.RegForms.register),
]
views.py
from django.shortcuts import render,HttpResponse
from django import forms #导入forms组件 class RegForms(forms.Form):
'''写要校验的字段'''
name = forms.CharField(min_length=3,max_length=8) #forms.CharField()这是一个对象,就是用这个对象来校验name,最小长度3,最大长度8
pwd = forms.CharField(min_length=3,max_length=8)
re_pwd = forms.CharField(min_length=3,max_length=8)
email = forms.EmailField() #这个对象校验的必须是email格式 def register(request):
if request.method == 'GET':
return render(request,'register.html')
elif request.method == 'POST':
'''生成一个forms对象,传入一个字典'''
forms = RegForms(request.POST) #要检验数据的话,就要在实例化时候传入对象
'''调用forms对象'''
if forms.is_valid(): #调用is_valid校验,合法就是返回True,不合法就是返回False
'''cleaned_data清洗后的数据,就是通过的数据都存在这里面,是一个字典'''
print('这里就是清洗后的数据: ',forms.cleaned_data)
else:
'''errors也是一个字典,错误的数据放这里面'''
errors_dic = forms.errors
print(errors_dic) #这个列表是底层做过处理和拼接的,有点难看懂
print('这里就是错误的数据: ',forms.errors.as_data) #要查看这个错误的信息字典,要用errors.data,这样就可以看懂 return HttpResponse('。。。。。。。。。。。。。')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>渲染页面的第一种方式</h1>
<h5>自动生成用户登陆的界面</h5>
<form action="" method="post">
{% csrf_token %}
<p>用户名:{{ forms.name }}</p>
<p>密码: {{ forms.pwd }}</p>
<p>确认密码: {{ forms.re_pwd }}</p>
<p>email: {{ forms.email }}</p>
<input type="submit" value="提交">
</form>
</body>
</html>
渲染页面的第二种方式 forms循环的方式 (推荐这种方式,代码量少,可控性高)
urls.py
from bbs01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'register/$',views.RegForms.register),
]
views.py
from django.shortcuts import render,HttpResponse from django import forms
class RegForms(forms.Form):
'''渲染页面的第二种方式,这里后面的参数要传一个lable,就是将name在前端显示中文名,不设定lable则默认用变量名'''
name = forms.CharField(min_length=3,max_length=8,label='用户名')
pwd = forms.CharField(min_length=3,max_length=8,label='密码')
re_pwd = forms.CharField(min_length=3,max_length=8,label='确认密码')
email = forms.EmailField(label='邮箱') def register(request):
if request.method == 'GET':
forms = RegForms()
return render(request,'register.html',{'forms':forms})
elif request.method == 'POST':
forms = RegForms(request.POST)
if forms.is_valid():
print('这里就是清洗后的数据: ',forms.cleaned_data)
else:
errors_dic = forms.errors
print(errors_dic)
print('这里就是错误的数据: ',forms.errors.as_data) return HttpResponse('。。。。。。。。。。。。。')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>渲染页面的第二种方式</h1>
<form action="" method="post">
{% csrf_token %}
{% for form in forms %}
{#这里从后端取输入框对应的名字用lable#}
<p>{{ form.label }}:{{ form }}</p>
{% endfor %}
</form>
</body>
</html>
渲染错误信息
PS:每一个对象里面都有一个errors错误信息
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<style>
.errors {
color: red;
margin-left: 20px;
}
</style>
</head>
<body>
<h1>forms渲染页面,实现局部刷新</h1>
<form action="" method="post" novalidate>
{% csrf_token %}
{% for form in forms %}
{#每一个对象中都有一个错误信息,这去对象中的errors就是获得对象的错误信息,然后取0就是最近的一个,这样不会换行,否则程序会自动将错误信息放入li列表中换行#}
<p>{{ form.label }}:{{ form }}<span class="errors">{{ form.errors.0 }}</span></p>
{% endfor %}
<input type="submit" value="提交">
</form>
</body>
</html>
views.py
from django.shortcuts import render,HttpResponse from django import forms class RegForms(forms.Form):
'''渲染页面的错误信息是中文,这里要传入一个字典,设定参数对应的显示值'''
name = forms.CharField(min_length=3,max_length=8,label='用户名',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'})
pwd = forms.CharField(min_length=3,max_length=8,label='密码',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'})
re_pwd = forms.CharField(min_length=3,max_length=8,label='确认密码',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'})
email = forms.EmailField(label='邮箱',error_messages={'invalid':'格式不是邮箱格式','required':'该字段必填'}) def register(request):
if request.method == 'GET':
forms = RegForms()
elif request.method == 'POST':
forms = RegForms(request.POST)
if forms.is_valid():
print('这里就是清洗后的数据: ',forms.cleaned_data)
return HttpResponse('注册成功')
else:
errors_dic = forms.errors
print(errors_dic)
print('这里就是错误的数据: ',forms.errors.as_data) return render(request,'register.html',{'forms':forms})
(32)forms组件(数据校验)的更多相关文章
- Django学习——分页器基本使用、分页器终极用法、forms组件之校验字段、forms组件之渲染标签、forms组件全局钩子,局部钩子
内容 1 分页器基本使用 2 分页器终极用法 3 forms组件之校验字段 1 前端 <!DOCTYPE html> <html lang="en"> &l ...
- Django forms组件的校验
引入: from django import forms 使用方法:定义规则,例: class UserForm(forms.Form): name=forms.CharField(max_lengt ...
- Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08
目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...
- Django框架(十四)-- forms组件、局部钩子、全局钩子
一.什么是forms组件 forms组件就是一个类,可以检测前端传来的数据,是否合法. 例如,前端传来的邮箱数据,判断邮件格式对不对,用户名中不能以什么开头,等等 二.forms组件的使用 1.使用语 ...
- Django框架(十五)—— forms组件、局部钩子、全局钩子
目录 forms组件.局部钩子.全局钩子 一.什么是forms组件 二.forms组件的使用 1.使用语法 2.组件的参数 3.注意点 三.渲染模板 四.渲染错误信息 五.局部钩子 1.什么是局部钩子 ...
- django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息
******************************* Forms组件 *************************************************** Forms组件在 ...
- Django day26 HyperlinkedIdentityField,序列化组件的数据校验以及功能的(全局,局部)钩子函数,序列化组件的反序列化和保存
一:HyperlinkedIdentityField(用的很少):传三个参数:第一个路由名字,用来反向解析,第二个参数是要反向解析的参数值,第三个参数:有名分组的名字 -1 publish = ser ...
- python 全栈开发,Day78(Django组件-forms组件)
一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...
- 03、 forms组件
1.校验字段功能 1.reg页面准备 models from django.db import models class UserInfo(models.Model): useranme = mode ...
- 基于forms组件和Ajax实现注册功能
一.基于forms组件的注册页面设计 1.运用forms组件的校验字段功能实现用户注册 views.py: (在钩子中代码解耦,将form放在cnblog/blog/Myforms.py中) f ...
随机推荐
- DDD 之 Multiple Canonical Models
MultipleCanonicalModels Scratch any large enterprise and you'll usually find some kind of group focu ...
- Ubuntu 14.04 下安装 OpenCV
参考: Installation in Linux Error compiling OpenCV, fatal error: stdlib.h: No such file or directory 图 ...
- 线性回归(linear regression)
基本形式 最小二乘法估计拟合参数 最小二乘法:基于均方误差最小化来进行模型求解的方法称为“最小二乘法”(least square method) 即(左边代表 $\mathbf{\omega }$ 和 ...
- Jquery动画效果(混合)
1.图片随滚动条滚动 代码: var menuYloc = $("#right").offset().top; $(window).scroll(function () { var ...
- 新建node工程
之前各种node工程都是东抄抄,西抄抄的. 用ng的cli之后,发现非常舒服.所以把node新建工程的种种记录一下. node+babel, 直接按es6标准写就好了, 不需要一定写ts再转码了( ...
- Struts2 环境配置
1.下载struts2开发包 2.将apps中的 Struts-blank.war 解压,里面的 lib 中就是所需jar包 3.新建一个web project项目,将jar包导入复制粘贴到lib中 ...
- [MySQL]配置多个MySQL服务(Windows)
配置多个MySQL服务 1.复制原解压好的MySQL文件到本目录下,且改名为MySQL2 2.修改MySQL2文件夹中的my.ini 修改my.ini文件中的以下内容,并保存文件: [client] ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建自定义视图
jQuery EasyUI 数据网格 - 创建自定义视图 在不同的情况下,您可能需要为数据网格(datagrid)运用更灵活的布局.对于用户来说,卡片视图(Card View)是个不错的选择.这个工具 ...
- HTML辅助方法
顾名思义,HTML辅助方法(HTML Helper)就是用来辅助产生HTML之用,在开发View的时候一定会面对许多HTML标签,处理这些HTML的工作非常繁琐,为了降低View的复杂度,可以使用HT ...
- HDU - 1575——矩阵快速幂问题
HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n( ...