这是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. T-MAX——团队展示

    第一次团队博客:百战黄沙穿金甲 基础介绍 这个作业属于哪个课程 2019秋福大软件工程实践Z班 这个作业要求在哪里 团队作业第一次-团队展示 团队名称 T-MAX 这个作业的目标 展现团队成员的风采, ...

  2. Cesium中的几种坐标和相互转换【转】

    几个重要的坐标对象:1.世界坐标 Cartesian3:笛卡尔空间直角坐标系 new Cesium.Cartesian3(x, y, z) 可以看作,以椭球中心为原点的空间直角坐标系中的一个点的坐标. ...

  3. 【java编程】vo、po、dto、bo、pojo、entity、mode如何区分

    Java Bean:一种可重用组件,即“一次编写,任何地方执行,任何地方重用”.满足三个条件 类必须是具体的和公共的 具有无参构造器 提供一致性设计模式的公共方法将内部域或暴露成员属性 VO valu ...

  4. Spring @RequestMapping 参数说明

    @RequestMapping 参数说明: value:  指定请求的实际地址, 比如 /action/info之类.method:  指定请求的method类型, GET.POST.PUT.DELE ...

  5. Scrapy中的Settings

    Settings Scrapy设置(settings)提供了定制Scrapy组件的方法.可以控制包括核心(core),插件(extension),pipeline及spider组件.比如 设置Json ...

  6. java中为什么notify()可能会导致死锁,而notifyAll()则不会

    简单的说,notify()只唤醒一个正在等待的线程,当该线程执行完以后施放该对象的锁,而没有再次执行notify()方法,则其它正在等待的线程 则一直处于等待状态,不会被唤醒而进入该对象的锁的竞争池, ...

  7. 使用Javascript从Google Places搜索api获取纬度和经度

    如何使用谷歌地图搜索框api从搜索到的位置获取经度和纬度. 我使用与谷歌演示相同的代码 – https://developers.google.com/maps/documentation/javas ...

  8. python 根据生日计算年龄 sqlalchemy根据身份证号计算生日 性别

    import datetime '): birth_d = datetime.datetime.strptime(birth_s, "%Y%m%d") today_d = date ...

  9. Centos7根据yum源安装指定版本docker

    yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mi ...

  10. FastJson 对json中的KEY值的大小写转换方法

    /** * json大写转小写 * * @return JSONObject */ public static JSONObject transToLowerObject(String json) { ...