这是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表单的密码是否一致校验功能的更多相关文章

  1. easyUI Form表单的密码验证是否相同

    一.js文件中的代码: $(function(){ $.extend($.fn.validatebox.defaults.rules, { equals: {//定义一个比较相等与否的函数 valid ...

  2. js form表单 鼠标移入弹出提示功能

    JS 部分 /* Copyright (C) 2009 - 2012 Email: wangking717@qq.com WebSite: Http://wangking717.javaeye.com ...

  3. js实现form表单提交,图片预览功能

    代码如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  4. Django 之 form表单

    Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...

  5. day75 form 组件(对form表单进行输入值校验的一种方式)

    我们的组件是什么呢 select distinct(id,title,price) from book ORM: model.py class Book(): title=model.CharFiel ...

  6. React-Antd4的Form表单校验

    之前很少用react做项目,最近入职新公司,用的react,在自己的摸索过程中,慢慢会记录一些使用方法.今天简单记录一下使用antd 4.0版本的Form表单校验,直接代码. 需要购买阿里云产品和服务 ...

  7. Element Ui使用技巧——Form表单的校验规则rules详细说明

    Element UI中对Form表单验证的使用介绍: Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item的 prop 属性设置为需校验的字段名 ...

  8. Laravel Form 表单的数据校验

    例如,要使用手机号加验证码的方式提供登录网站的功能,那么在处理前端提交的 form 表单时,就不得不对提交的手机号及验证码做基本的数据校验. 手写规则,非常浪费时间.使用 laravel 内置的 va ...

  9. vue自定义轻量级form表单校验

    遇到了form表单提交的需求,找了vue的组件觉得不够灵活,有时间自己写了一个. 调用方法 全局引入注册: import va from 'global/js/va' va.install(Vue); ...

随机推荐

  1. java并发编程(八) CAS & Unsafe & atomic

    参考文档:https://www.cnblogs.com/xrq730/p/4976007.html CAS(Compare and Swap) 一个CAS方法包含三个参数CAS(V,E,N).V表示 ...

  2. mvn常见参数命令讲解

    关于-N -N,--non-recursive Do not recurse into sub-projects 意思是,不递归到子项目(子模块). 举例: 一个父项目下Father面有3个子项目A. ...

  3. 在HPC的节点上使用jupyter notebook

    投递任务,注意资源设置 #!/bin/bash #SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --cpus-per-task=1 #SBATCH --mem ...

  4. 判断mysql数据库表和表字段是否存在

    1.判断数据库表是否存在, // mysqlSELECT table_name FROM information_schema.tables WHERE table_name=#{tableName, ...

  5. vue-cli webpack打包开启Gzip 报错—— Cannot find module 'compression-webpack-plugin

    异常描述: 复用以前框架,打包的时候报异常提示: Cannot find module 'compression-webpack-plugin" 然后安装插件: npm install -- ...

  6. flutter 高德地图选择位置信息返回

    添加依赖:(注意,作者一直更新维护,请以最新的版本添加) amap_map_fluttify: ^ amap_search_fluttify: ^ 代码实现: import 'package:amap ...

  7. zabbix使用自动发现功能批量监控服务器端口的可用性

    使用自动发现脚本批量监控服务器端口的可用性 .编写自动发现脚本 # cat /usr/local/zabbix_agents_3.2.0/scripts/web_site_code_status.sh ...

  8. Python3基础 内置函数 dir 查询对象的方法列表

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  9. Qt编写安防视频监控系统16-设备播放

    一.前言 设备播放模块是后面增加的,核心就是通过组合rtsp视频流地址来播放实时视频和历史视频,目前市面上很多厂家比如排第一的海康都是支持直接rtsp通过NVR来播放某个通道视频流和回放某个通道的视频 ...

  10. Linux命令-nohup和&

    基础 在linux终端或控制台上执行命令时,可能不希望脚本占住屏幕需要在后台执行脚本,有几种方法让脚本在后台执行: & 当在前台运行某个作业时,终端被该作业占据:可以在命令后面加上& ...