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); ...
随机推荐
- SpringBoot升级报错:Failed to bind properties under 'logging.level'
错误详细信息: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties un ...
- bootstrap弹框去除遮罩层效果
是通过css解决这个问题,核心css代码如下: .modal-backdrop { filter: alpha(opacity=)!important; opacity: !important; } ...
- sql脱库的几种方法
当发现sql注入之后,脱库的方法,有以下几种: (1)当目标主机支持外部连接时,使用Navicat 进行连接!当时目标主机不同,使用的Navicat种类不一样: mysql : Navicat f ...
- 【Beta】Scrum Meeting 7 & 与助教谈话
前言 Beta阶段第7次会议在5月12日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 修复修改密码问题#54添加主页公告栏 #57(调整 ...
- tp的ajaxReturn后, 还要用echo $rt吗?
首先你要看 ajaxReturn的原型: protected function ajaxReturn ($data, $type='', $json_option=0){ ........ switc ...
- string, byte[], Base64String相互转化
直接使用.NET中的的库类函数 方法: ///<summary> ///Base64加密 ///</summary> ///<paramname="Messag ...
- Openresty与Tengine
Tengine官方网站:http://tengine.taobao.org/index_cn.html OpenResty官方网站:http://openresty.org/ Openresty和Te ...
- python 使用sqlalchemy进行数据库操作
sqlalchemy是python下一个著名的数据库orm库,可以方便地进行数据表创建.数据增删改查等操作 最详细的教程,见官方:https://docs.sqlalchemy.org 这里列举一些常 ...
- Visual Assist之Hashtags功能简介
Visual Assist是一款非常好的Visual Studio下开发的插件,网上已经有很多关于它的配置以及相关介绍,本文不再赘述.本文将注重介绍它的Hashtags功能. 本文主要内容来自于官网介 ...
- CentOS7 安装Redis和PHP-redis扩展
aemonize yes Redis是一个key-value存储系统,属于我们常说的NoSQL.它遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的AP ...