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组件(数据校验)的更多相关文章

  1. Django学习——分页器基本使用、分页器终极用法、forms组件之校验字段、forms组件之渲染标签、forms组件全局钩子,局部钩子

    内容 1 分页器基本使用 2 分页器终极用法 3 forms组件之校验字段 1 前端 <!DOCTYPE html> <html lang="en"> &l ...

  2. Django forms组件的校验

    引入: from django import forms 使用方法:定义规则,例: class UserForm(forms.Form): name=forms.CharField(max_lengt ...

  3. Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08

    目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...

  4. Django框架(十四)-- forms组件、局部钩子、全局钩子

    一.什么是forms组件 forms组件就是一个类,可以检测前端传来的数据,是否合法. 例如,前端传来的邮箱数据,判断邮件格式对不对,用户名中不能以什么开头,等等 二.forms组件的使用 1.使用语 ...

  5. Django框架(十五)—— forms组件、局部钩子、全局钩子

    目录 forms组件.局部钩子.全局钩子 一.什么是forms组件 二.forms组件的使用 1.使用语法 2.组件的参数 3.注意点 三.渲染模板 四.渲染错误信息 五.局部钩子 1.什么是局部钩子 ...

  6. django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息

    ******************************* Forms组件 *************************************************** Forms组件在 ...

  7. Django day26 HyperlinkedIdentityField,序列化组件的数据校验以及功能的(全局,局部)钩子函数,序列化组件的反序列化和保存

    一:HyperlinkedIdentityField(用的很少):传三个参数:第一个路由名字,用来反向解析,第二个参数是要反向解析的参数值,第三个参数:有名分组的名字 -1 publish = ser ...

  8. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

  9. 03、 forms组件

    1.校验字段功能 1.reg页面准备 models from django.db import models class UserInfo(models.Model): useranme = mode ...

  10. 基于forms组件和Ajax实现注册功能

    一.基于forms组件的注册页面设计 1.运用forms组件的校验字段功能实现用户注册 views.py:    (在钩子中代码解耦,将form放在cnblog/blog/Myforms.py中) f ...

随机推荐

  1. react-router 4.0(一)

    import React from 'react'; import ReactDOM from 'react-dom' import {Link,Route,HashRouter} from 'rea ...

  2. 同事在使用shiro后遇到的异常

    一切配置按照demo来的,给他讲了一遍捋顺了.然后之前他做的demohim按照他网络摘抄的shiro博客看的. 然后注册了,正常,登录,提示密码不匹配. 问题出在注册的密码加密次数是2, 而shiro ...

  3. mybatis分页插件PagePlugin

    查询的参数对象里面继承PageInfoWrapper类(也可以不继承这个类,但要保证查询参数对象里面必须要有一个PageInfo属性) 分页信息都在PageInfo这个类里,查询的时候,分页参数,填充 ...

  4. 将npm的注册表源设置为国内的镜像

    1.国内用户,建议将npm的注册表源设置为国内的镜像,可以大幅提升安装速度 2.国内优秀npm镜像推荐及使用:http://riny.net/2014/cnpm/ 淘宝npm镜像 ·搜索地址:http ...

  5. POI 导入excel 代码记录 方便以后粘贴

    import java.io.FileInputStream; import java.io.InputStream; import javax.annotation.Resource; import ...

  6. 安卓下设置系统字体大小影响H5页面布局

    问题描述: 调整好的h5页面,放在安卓app内嵌页面后布局正常,后来用户调整系统里面字体大小,后内嵌H5布局乱掉 问题分析: 因为用户调整了系统字体的大小,修改了根节点和body节点的font-siz ...

  7. python学习(五)

  8. element-ui <el-input> +<el-tree>使用

    <template> <!-- 需求:通过点击<el-input> 将<el-tree>树型结构打开,选中<el-tree>某个值显示在<e ...

  9. C# 用 WebClient 的 Post 方法向 WebServer 传输数据

    帮朋友做一个通过Web简单传输数据的例子,百度了一下抄了段代码,完成,效果如下: 其中textBox1里面是客户端需要传输过去的数据,textBox2里面是接收到的返回数据. 代码如下: using ...

  10. httpd 2.4连接php-fpm

    php-fpm参数修改 默认php-fpm监听在127.0.0.1接口上,修改listen = 192.168.99.150:9000,可以监听在指定网卡上. 默认php-fpm仅允许127.0.0. ...