1.

了解form 组件的原理

1.建立好form组件 class>>>

2.了解需要先is_valid() 判断是否可以取值

成功 form.cleaned_data 查看成功认证的字典

失败 form.errors  查看失败的键值对

3.自定义 钩子

4.在def clean 比较,通过

form.errors.get("__all__"):
获取哪里的
raise ValidationError("两次密码不一致")
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body> {#<form action="" method="post">#}
{# {% csrf_token %}#}
{# <p>用户名 <input type="text" name="user" ><span class="error">{{ error.user.0 }}</span></p>#}
{# <p>密码 <input type="password" name="pwd"> <span class="error">{{ error.pwd.0 }}</span></p>#}
{# <p>邮箱 <input type="text" name="email"> <span class="error">{{ error.email.0 }}</span></p>#}
{# <input type="submit">#}
{# #}
{#</form>#}
<h3>reg第一种</h3>
{#<form action="" method="post">#}
{# #}
{# {% csrf_token %}#}
{# {{ form.as_p }}#}
{# <input type="submit">#}
{#</form>#} <h3>reg第二种即使写错了也会保留输入的信息</h3>
{#<div class="container">#}
{# <div class="row">#}
{# <div class="col-md-8 col-md-offset-2">#}
{# <form action="" method="post" novalidate>#}
{# {% csrf_token %}#}
{# <p> 用户名 {{ form.user }}<span class="error">{{ errors.user.0 }}</span> </p>#}
{# <p>密码 {{ form.pwd }}<span class="error">{{ errors.pwd.0 }}</span></p>#}
{# <p>邮箱 {{ form.email }}<span class="error">{{ errors.email.0 }}</span></p>#}
{##}
{# <input type="submit" class="btn btn-success pull-right">#}
{# </form>#}
{# </div>#}
{# </div>#}
{#</div>#}
{##} <h3>reg第三种 完美版</h3>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for foo in form %} <div class="from-group">
<label for="">{{ foo.label }}</label>
{# 这里的foo的属性为 form表单的一系类标签#}
{# foo.errors.0 指的是当出现错误信息返回时,错误信息是以表单的字段位键,值是错误信息,以取得 #}
{{ foo }} <span class="error">{{ foo.errors.0 }}</span>
{# 当返回的是自定义错误时,需要在def clean拿变区分是否两次密码一样,取到的在__all__里面#}
{% if foo.label == "确认密码" %}
<span class="errors">{{ g_error|default:"" }}</span> {% endif %} </div>
{% endfor %}
<input type="reset">
<input type="submit" class="btn btn-success pull-right"> </form>
</div>
</div>
</div> </body>
</html>

reg.html

 from django.shortcuts import render, HttpResponse

 # Create your views here.
# 1.引入自定义条件和form
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django import forms
from django.forms import widgets class UserFrom(forms.Form):
msg = {"required": "该字段不能为空"}
user = forms.CharField(min_length=5, label="用户名", error_messages=msg,
widget=widgets.TextInput(attrs={"class": "form-control"}))
pwd = forms.CharField(error_messages=msg, label="密码", widget=widgets.TextInput(attrs={"class": "form-control"})) r_pwd = forms.CharField(error_messages=msg,
min_length=5,
label="确认密码",
widget=widgets.PasswordInput(attrs={"class": "form-control"}))
email = forms.EmailField(error_messages={"invalid": "邮箱格式错误"},
label="邮箱",
widget=widgets.EmailInput(attrs={"class": "form-control"})) def clean_user(self):
val = self.cleaned_data.get("user") # 从cleaned_data取到user
ret = UserInfo.objects.filter(user=val).first() # 在数据库列表中找到user的字典
if not ret: # 不存在,返回user,再讲user传递给数据库进行录入
return val
else:# 这里讲错误的信息传递给error
raise ValidationError("用户名已经处在!") def clean_pwd(self):
val = self.cleaned_data.get("pwd")
if val.isdigit():
return ValidationError("密码不能是纯数字") # 这里讲错误的信息传递给error
else:
return val def clean(self):#这里源码是 返回self.cleaned_data,需要在这里进行比对,若果错误的话返回一个错误的信息返回
pwd = self.cleaned_data.get("pwd")
r_pwd = self.cleaned_data.get("r_pwd") if pwd and r_pwd:
if pwd == r_pwd:#这里要清除错误的键值对,因为auth_user 没有r_password
del self.cleaned_data["r_pwd"] return self.cleaned_data
else:
raise ValidationError("两次密码不一致")
else:
return self.cleaned_data from app01.models import UserInfo def reg(request):
if request.method == "POST":
print("request.POST", request.POST) # 打印post请求 form = UserFrom(request.POST)
print("form", form)
if form.is_valid():
print("form.cleaned_data.user", form.cleaned_data) # 打印通过is_valid一串字典,以form字段为键的字典
UserInfo.objects.create(**form.cleaned_data)
return HttpResponse("OK")
else:
errors = form.errors
print("form.errors", form.errors) # 接收到以form为字段的键,含错误信息的值
print("form.cleaned_data", form.cleaned_data) # 打印录入的字典
# print(form.errors.get("user")[0])#从error中精确获取值
print("------>", form.errors.get("__all__"))#将在def clean方法的错误信息返回 if form.errors.get("__all__"): # 获取全局的变量
g_error = form.errors.get("__all__")[0] # 将错误返回
return render(request, "reg.html", locals()) else:
form = UserFrom()
return render(request, "reg.html", locals())

views

django的form 登录组件的更多相关文章

  1. 《React后台管理系统实战 :一》:目录结构、引入antd、引入路由、写login页面、使用antd的form登录组件、form前台验证、高阶函数/组件

    实战 上接,笔记:https://blog.csdn.net/u010132177/article/details/104150177 https://gitee.com/pasaulis/react ...

  2. django 的form登录 注册

    #!/usr/bin/env python # -*- coding: utf8 -*- #__Author: "Skiler Hao" #date: 2017/3/30 15:4 ...

  3. Django之Form、ModelForm 组件

    Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...

  4. 〖Python〗-- Django的Form组件

    [Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...

  5. Django 的 Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使用: 1.定义规则: from ...

  6. Django之Form与ModelForm组件

    Django之Form与ModelForm组件 1.Form介绍 Form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 O 保留上次的输入内容 普通方式手写注册功能 vi ...

  7. Django之Form组件

    Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...

  8. Python之路【第二十一篇】:Django之Form组件

    Django之Form组件   Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...

  9. 第十一篇:web之Django之Form组件

    Django之Form组件   Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功 ...

随机推荐

  1. Linux配置DHCP服务器,DHCP中继配置

    配置dhcp服务器 第一步:配置网卡 第二步: 安装dhcp (需要先构建yum仓库,构建yum仓库的方法在之前的博客里有) 编写dhcp.conf文件 进去以后会出现这个内容 需要执行下面的内容将内 ...

  2. vue-lazyload 图片懒加载

    vue-lazyload简单使用 github地址:https://github.com/hilongjw/vue-lazyload 1.安装插件 npm install vue-lazyload - ...

  3. oracle- 审计日志

    一.审计功能关闭 1.查看审计功能是否开启? su – oracle sqlplus “/as sysdba” SQL> show parameter audit_trail NAME      ...

  4. 微信小程序前端调用后台方法并获取返回值

    wxml代码 <wxs src="../../wxs/string.wxs" module="tools" /> <!-- 调用tools.i ...

  5. 微信企业号SDK

    1. 微信企业号SDK class class_wxqiye { var $corpid = CorpID; var $corpsecret = CorpSecret; var $agentid = ...

  6. asp.net core 2.1 容器中使用 System.Drawing.Common 的问题

  7. Postman界面了解

    Postman界面了解 2019年3月21日去面试了一家软件测试,本以为自己对简历上写的技能都熟悉,跳个槽,涨点工资,想象很美好,现实太残忍.当问到做接口测试postman和swagger工具的时候, ...

  8. ng使用bootstrap

    1.在项目中使用命令 npm i bootstrap -s来创建bootstrap 2.创建完成之后在 angular.json中引入进去 "styles": [          ...

  9. C# while循环

    一.简介 只要给定条件为true,C#的while循环语句会循环重新执行一个目标的语句. 二.语法 C# while的语法: while(循环条件) { 循环体: } 三.执行过程 程序运行到whil ...

  10. c#WinForm中TeeChart控件的注册和使用

    首先要注册好TeeChart控件,注册方法参考:https://blog.csdn.net/my_clear_mind/article/details/79741020 完成注册之后,新建一个WinF ...