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‘ %}" >
                        </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>

  在视图函数里面

 1 def register(request):
 2     if request.method == ‘POST‘:
 3         form_obj = forms.RegForm(request.POST)
 4         # 检验
 5         if form_obj.is_valid():
 6             # 检验通过
 7             # 去数据库创建一个新的用户
 8             # 删除多余的字段
 9             form_obj.cleaned_data.pop(‘re_password‘)
10             models.UserInfo.objects.create_user(**form_obj.cleaned_data)
11         else:
12             # 将错误的信息返回到注册页面
13             return render(request, ‘register.html‘, {"form_obj": form_obj})
14     form_obj = forms.RegForm()
15     return render(request, ‘register.html‘, {"form_obj": form_obj}) 

form_obj.is_valid()的执行顺序:
  1. 先按照form类中定义的字段顺序,依次校验每一个字段(内置的校验规则)
  2. 每个字段先校验内置的规则, 然后字校验clean_开头的规则
  3. 整个for循环走完之后, 再调用form类中定义的clean()方法

 

即可完成校验两次密码是否一致的功能

原文地址:https://www.cnblogs.com/wuyiyuan/p/12043732.html

时间: 2024-08-02 23:01:17

form表单的密码是否一致校验功能的相关文章

提交form表单---修改密码 ajax、jQuery

<form id ="password" method="post"> <table > <tr> <td>原密码:</td> <td><input type="password" class="easyui-validatebox" required="required" name="oldPassw"/&g

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

一.js文件中的代码: $(function(){ $.extend($.fn.validatebox.defaults.rules, { equals: {//定义一个比较相等与否的函数 validator: function(value,param){ return value == $(param[0]).val(); }, message: 'Field do not match.' } }); }); 二.jsp中定义的内容: <input id="pwd" name=

Django 之 form表单

Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现这些功能,比较便捷. 2.Django form表单的功能 1.生成页面可执行的HTML标签 2.对应户的数据进行校验 3.保留上次输入的内容 3.先用普通方式手写一个注册功能 1.views.py文件中 # 注册 def register(request): error_msg = ""

Django中Form表单之字段详解

Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现这些功能,比较便捷. 2.Django form表单的功能 1.生成页面可执行的HTML标签 2.对应户的数据进行校验 3.保留上次输入的内容 3.先用普通方式手写一个注册功能 1.views.py文件中 # 注册 def register(request): error_msg = ""

12-js校验form表单和event对象学习

js校验form表单: <html> <head> <title><html> <head> <title>js校验form表单</title> <meta charset="UTF-8"/> <!--声明css代码域--> <style type="text/css"> /*设置背景图片*/ body{ background-image: url

简约的form表单校验插件

前言 网上有好多form表单校验插件,包括jquery的表单检验插件,这些中好多插件功能很齐全强大,提示方式很酷,很美观好看.本想拿来用,但是发现几个问题: 1.使用不方便.校验规则繁多,调用校验函数难记忆. 2.提示方式固定.一般插件给出固定的几种提示方式,但是实际中,不同系统都有自己的页面风格样式,有自己的提示方式,插件自带的一般用不上. 因此,我最终没有采用这些插件,以免用后出现难以修改或实现的情况. 如果一种校验插件能避免以上两个问题最好了,方便使用,提示方式自定义 ,所以自己做了一个简

应用二:Vue之ElementUI Form表单校验

  表单校验是前端开发过程中最常用到的功能之一,根据个人的工作经验总结在此对表单校验功能的基础用法进行整理说明~ 如下代码是Form表单校验的demo示例: <template> <div id="demo"> <el-dialog title="表单校验示例" :close-on-click-modal="false" :visible.sync="dialogVisible" width=&q

vue+iview的form表单校验总结

这篇文章时关于如何使用iview的form表单校验.主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则和异步校验. 1.为需要校验的表单添加form标签 <!--注意: ref/rules/model/prop等属性是必须的--> <Form res="foemRef" :rules="formRules" :model="formData" v-if="liveNode">

form表单提交的两种方式 button和submit的使用方法

1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的头部插入一个js方法: function checkUser(){   var result = document.getElementById("userid").value;   var password = document.getElementById("userpass