利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验

该作业包含了下面的知识点:

error_messages,label,required,invalid,局部钩子函数,全局钩子函数,

forms_obj.cleaned_data,forms_obj.errors,locals(),

{{ forms.label }}:{{ forms }},{{ forms.errors.0 }}

urls.py文件

添加index访问路径

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^register/', views.register),
url(r'^index/', views.index), ]

views.py文件

创建视图函数


#***************************forms组件************************
# 使用forms组件,完成数据校验,展示错误信息
# 使用forms组件的前提是,你需要提前写一个类 from django import forms
from django.core.validators import RegexValidator class MyForm(forms.Form):
# username字段,最少三位,最多八位
username = forms.CharField(max_length=8, min_length=3, label='用户名',
error_messages={
'max_length': '用户名最长八位',
'min_length': '用户名最少三位',
'required': '用户名不能为空',
}
)
# password字段,最少三位,最多八位
password = forms.CharField(max_length=8, min_length=3, label='密码',
error_messages={
'max_length': '密码最多8位',
'min_length': '密码最少3位',
'required': '密码不能为空'
}
) confirm_password = forms.CharField(max_length=8, min_length=3, label='确认密码',
error_messages={
'max_length': '确认密码最多8位',
'min_length': '确认密码最少3位',
'required': '确认密码不能为空'
}
)
# email字段,必须是邮箱格式
email = forms.EmailField(label='邮箱', error_messages={
'required': '邮箱不能为空', # required,校验不能为空的固定用法
'invalid': '邮箱格式错误', # invalid,专门用来校验邮箱格式错误的固定用法 }) #********************************************************************************
#校验用户名中不能含有666,校验单个字段使用局部钩子函数,
#钩子函数是校验规则中最后执行的一道关卡,会先执行上面的校验规则,上面都校验通过了,
# 才会走到钩子函数这一层的校验来。
def clean_username(self):
# username=self.cleaned_data #是一个校验通过的大字典
# 通过的字典支持点get取值的方式,专门拿出来要校验的字段
username=self.cleaned_data.get('username')
if '666' in username:
#如何给username所对应的框展示错误信息呢?
#注意下面是钩子函数的固定用法,添加对应字段的错误提示信息
self.add_error('username','光喊666是不行的') #将username数据返回,这个地方是必须要返回字段数据的,缺失不可
return username
#********************************************************************************
#校验密码和确认密码是否一致 这个就要用到全局钩子函数
def clean(self):
password=self.cleaned_data.get('password')
confirm_password=self.cleaned_data.get('confirm_password')
if not password == confirm_password:
#注意下面是钩子函数的固定用法,添加对应字段的错误提示信息
self.add_error('confirm_password','两次密码不一致')
#全局钩子是需要将全局的数据全部返回
return self.cleaned_data '''
1.label='xxx'是对应的input输入框前面的提示文字
2.error_messages={
'max_length':'密码最多8位',
'min_length':'密码最少3位',
'required':'密码不能为空'
}
这个是固定格式,必填项必须用required也是固定的用法
3.required,校验不能为空的固定用法
4.invalid,专门用来校验邮箱格式错误的固定用法
''' def index(request):
''' 渲染标签:
第一步,需要生成一个空的forms_obj,MyForm类的对象
第二步,通过locals()和render方法渲染到前端index页面
'''
forms_obj = MyForm()
# 后端如何校验前端用户传入的数据
if request.method == 'POST': # 获取用户的数据,request.POST正好是一个字典,
# request.POST作为该类的参数传入MyForm()类中,
# 然后再交给Forms组件来校验数据
# 注意事项,这两个forms_obj对象必须要书写一致
forms_obj = MyForm(request.POST)
if forms_obj.is_valid():
print(forms_obj.cleaned_data) # 打印成功的数据
return HttpResponse('数据全部OK') else:
print(forms_obj.errors) # 打印错误的数据 return render(request, 'index.html', locals()) '''
获取用户的数据 request.POST正好是一个字典
检验数据神6条中的第二条:
2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)
form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'}) ''' # print(type(forms_obj))
# print('我是',forms_obj)
# for forms in forms_obj:
# print('我是',forms)
'''
forms 相关打印结果:
我是 < input
type = "text"
name = "username"
maxlength = "8"
minlength = "3"
required
id = "id_username" / >
'''
# 直接将生成的对象,传递给前端页面
#return render(request, 'index.html', locals())

index.html文件


<form action="" method="post" novalidate>
{% for forms in forms_obj %} <p>
{{ forms.label }}:{{ forms }}
<span>{{ forms.errors.0 }}</span>
</p> {# <span>{{ forms.label }}</span> #}
{# <span>{{ forms }}</span>#}
{# {{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示 #}
{# {{ forms }} 是表单中所有的输入框 #}
{# {{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看 #}
{% endfor %} <input type="submit">
</form>

django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}的更多相关文章

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

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

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

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

  3. SpringMVC基础入门,创建一个HelloWorld程序

    ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要 ...

  4. Qt 创建一个QtDesinger第三方控件

    1.需要创建一个合适的.pro文件 2.创建一个继承QDesignerCustomWidgetInterface的类,描述控件的一些属性. 函数 描述和返回值 name() 指定控件的名称 group ...

  5. Django学习笔记(14)——AJAX与Form组件知识补充(局部钩子和全局钩子详解)

    我在之前做了一个关于AJAX和form组件的笔记,可以参考:Django学习笔记(8)——前后台数据交互实战(AJAX):Django学习笔记(6)——Form表单 我觉得自己在写Django笔记(8 ...

  6. Django12-ModelForm中创建局部钩子和全局钩子

    一.局部钩子 命名规则为clean_对象名称,例如上面定义了username.pwd对象,那么可以定义clean_username.clean_pwd的局部钩子进行规则校验 1.例子:定义一个手机号校 ...

  7. ReactJS实用技巧(2):从新人大坑——表单组件来看State

    不太清楚有多少初学React的同学和博主当时一样,在看完React的生命周期.数据流之后觉得已经上手了,甩开文档啪啪啪的开始敲了起来.结果...居然被一个input标签给教做人了. 故事是这样的:首先 ...

  8. 如何实现Ant design表单组件封装?

    目标:自己实现一个antd表单组件 先看下Ant Design官网上给出的表单组件用法: import React, { Component } from 'react' import { Form, ...

  9. 使用iview 的表单组件验证 Upload 组件

    使用iview 的表单组件验证 Upload 组件 结果: 点击提交按钮, 没有填的form 项, 提示错误, 当填入数据后提示验证成功 代码: <template> <div id ...

随机推荐

  1. 设计模式——代理模式(Proxy)

    定义 为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端和目标对象之间起到中介的作用.(结构型) 如果不知道代理模式,可能大家对代理服务器都不叫熟悉.代替服务器代替请求者去发一起对另一个 ...

  2. nginx一:安装和基本应用

    Nginx: 目录 Nginx:... 1 NGINX简介和安装... 1 网站... 1 全称... 2 二次开发版... 2 Nginx的特性... 2 基本功能... 2 web服务相关的功能. ...

  3. 使用 buildx 构建多平台 Docker 镜像

    原文链接:使用 buildx 构建多平台 Docker 镜像 在工作和生活中,我们可能经常需要将某个程序跑在不同的 CPU 架构上,比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上.特别是 D ...

  4. java JDK安装包的获取与安装

    Java JDK 安装包获取和安装: JDK 1.8.211 官网下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  5. 行内元素(inline标签)设置了行高为什么不生效,还是表现为父盒子的行高?行内元素行高问题终极解释

    最近在看张鑫旭大佬的<css世界>,读到5.2.4  内联元素 line-height 的“大值特性” ,产生了疑惑, 在开发中确实也遇到了同样的问题,深入探究后得出结果,先说结论吧,论证 ...

  6. OC中内存管理(转)

    OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继 ...

  7. 一图读懂基于鲲鹏处理器的全栈混合云华为云Stack6.5

    [摘要] 够料的全栈混合云干货信息,速戳! 近日,在2019华为云城市峰会广州站上,华为云发布基于鲲鹏处理器的全栈混合云解决方案HCS 6.5.x86+鲲鹏,双驱动开启云上新架构;云上+本地,双平台无 ...

  8. 转:Java transient关键字使用小记

    哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transi ...

  9. Oracle 数据库启动与关闭

    只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果没有启 ...

  10. 利用iPhone下载其他地区的App

    参考链接:http://www.anfan.com/news/gonglue/76225.html 有些App由于发布的地区不同,在中国地区未发布的App.使用中国地区的Apple ID只能看到中国地 ...