form表单的密码是否一致校验功能
这是form类表单,自定义的form表单,需要重写钩子函数
"""
forms类表单
"""
# 校验密码是否一致
from django.core.exceptions import ValidationError from django import forms class RegForm(forms.Form):
username = forms.CharField(
max_length=16,
label='用户名',
label_suffix=":", # 后缀
error_messages={
"max_length": "用户名最长16位",
"required": "用户名不能为空"
},
widget=forms.widgets.TextInput(
attrs={
"class": "form-control"
}
)
) password = forms.CharField(
min_length=6,
label='密码',
widget=forms.widgets.PasswordInput(
attrs={
"class": "form-control"
},
render_value=True, #提交数据不把密码清空
),
error_messages={
"min_length": "密码至少六位数",
"required": "密码不能为空"
}
) re_password = forms.CharField(
min_length=6,
label='确认密码',
widget=forms.widgets.PasswordInput(
attrs={
"class": "form-control"
}
),
error_messages={
"min_length": "密码至少六位数",
"required": "密码不能为空"
}
) email = forms.EmailField(
label='邮箱',
widget=forms.widgets.EmailInput(
attrs={
"class": "form-control"
}
),
error_messages={
"invalid": "邮箱格式不正确!",
}
) # 重写全局的钩子函数,对确认密码做校验
def clean(self):
password = self.cleaned_data.get("password")
re_password = self.cleaned_data.get("re_password") if re_password and re_password != password:
self.add_error("re_password",ValidationError("两次密码不一致"))
else:
return self.cleaned_data
在HTML里面应该这样写
<!DOCTYPE html>
<html lang="en">
<head>
{% load static %}
<meta charset="UTF-8">
<title>欢迎注册</title>
<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'mystyle.css' %}">
</head>
<body>
<div class="container reg-form">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form novalidate action="/register/" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="col-sm-2 control-label" for="{{ form_obj.username.id_for_label }}">
{{ form_obj.username.label }}
</label>
<div class="col-sm-8">
{{ form_obj.username }}
<span class="help-block">{{ form_obj.username.errors.0 }}</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="{{ form_obj.password.id_for_label }}">
{{ form_obj.password.label }}
</label>
<div class="col-sm-8">
{{ form_obj.password }}
<span class="help-block">{{ form_obj.password.errors.0 }}</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="{{ form_obj.re_password.id_for_label }}">
{{ form_obj.re_password.label }}
</label>
<div class="col-sm-8">
{{ form_obj.re_password }}
<span class="help-block">{{ form_obj.re_password.errors.0 }}</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="{{ form_obj.email.id_for_label }}">
{{ form_obj.email.label }}
</label>
<div class="col-sm-8">
{{ form_obj.email }}
<span class="help-block">{{ form_obj.email.errors.0 }}</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="id_avatar">
头像
</label>
<div class="col-sm-8">
<label for="id_avatar" id="id_avatar_lab">
<img id="id_avatar-img" src="{% static 'images/default.jpg' %}" alt="">
</label>
<input type="file" name="avatar" id="id_avatar" style="display: none">
<span class="help-block"></span>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">注册</button>
</div>
</div>
</form>
</div>
</div>
</div>
在视图函数里面
def register(request):
if request.method == 'POST':
form_obj = forms.RegForm(request.POST)
# 检验
if form_obj.is_valid():
# 检验通过
# 去数据库创建一个新的用户
# 删除多余的字段
form_obj.cleaned_data.pop('re_password')
models.UserInfo.objects.create_user(**form_obj.cleaned_data)
else:
# 将错误的信息返回到注册页面
return render(request, 'register.html', {"form_obj": form_obj})
form_obj = forms.RegForm()
return render(request, 'register.html', {"form_obj": form_obj})
form_obj.is_valid()的执行顺序:
1. 先按照form类中定义的字段顺序,依次校验每一个字段(内置的校验规则)
2. 每个字段先校验内置的规则, 然后字校验clean_开头的规则
3. 整个for循环走完之后, 再调用form类中定义的clean()方法
即可完成校验两次密码是否一致的功能
form表单的密码是否一致校验功能的更多相关文章
- easyUI Form表单的密码验证是否相同
一.js文件中的代码: $(function(){ $.extend($.fn.validatebox.defaults.rules, { equals: {//定义一个比较相等与否的函数 valid ...
- js form表单 鼠标移入弹出提示功能
JS 部分 /* Copyright (C) 2009 - 2012 Email: wangking717@qq.com WebSite: Http://wangking717.javaeye.com ...
- js实现form表单提交,图片预览功能
代码如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; ...
- Django 之 form表单
Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...
- day75 form 组件(对form表单进行输入值校验的一种方式)
我们的组件是什么呢 select distinct(id,title,price) from book ORM: model.py class Book(): title=model.CharFiel ...
- React-Antd4的Form表单校验
之前很少用react做项目,最近入职新公司,用的react,在自己的摸索过程中,慢慢会记录一些使用方法.今天简单记录一下使用antd 4.0版本的Form表单校验,直接代码. 需要购买阿里云产品和服务 ...
- Element Ui使用技巧——Form表单的校验规则rules详细说明
Element UI中对Form表单验证的使用介绍: Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item的 prop 属性设置为需校验的字段名 ...
- Laravel Form 表单的数据校验
例如,要使用手机号加验证码的方式提供登录网站的功能,那么在处理前端提交的 form 表单时,就不得不对提交的手机号及验证码做基本的数据校验. 手写规则,非常浪费时间.使用 laravel 内置的 va ...
- vue自定义轻量级form表单校验
遇到了form表单提交的需求,找了vue的组件觉得不够灵活,有时间自己写了一个. 调用方法 全局引入注册: import va from 'global/js/va' va.install(Vue); ...
随机推荐
- 微信小程序支付接口之Django后台
本文链接:https://blog.csdn.net/qq_41860162/article/details/89098694Python3-django-微信小程序支付接口调用工具类生成一系列微信官 ...
- Linux的tmpfs和ramfs
tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. V ...
- 对数损失函数logloss详解和python代码
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...
- 异常值检验实战3_NBA球员表现稳定性分析
机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&sh ...
- C#利用iTextSharp将datatable数据转化为PDF文件
1.下载iTextSharp.dll文件 下载链接:https://pan.baidu.com/s/14o-pJ-U2yU8n0EyIn249qg 提取码:tklu 2.PDF转换方法 /// < ...
- Anaconda用conda创建python虚拟环境
Anaconda用conda创建python虚拟环境 一.简介 conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理.包管理与pip的使用类似,环境管理则允许用户方便地安装不 ...
- 虚拟机 /dev/mapper/centos-root 动态扩容
[root@bogon ~]# df -h Filesystem Size Used Avail Use% Mounted on .2G .2G 51M % / devtmpfs 908M 908M ...
- scrapy爬虫案例:用MongoDB保存数据
用Pymongo保存数据 爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中. items.py class DoubanspiderItem( ...
- redhat 6安装python 3.7.4报错ModuleNotFoundError: No module named '_ctypes' make: *** [install] Error 1
问题描述: 今天在测试环境中,为了执行脚本,安装下python3命令,在执行make install的时候报错: ModuleNotFoundError: No module named '_ctyp ...
- Scheduling In Go
https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html https://blog.altoros.com/golang-i ...