django登录注册验证之密码包含特殊字符,确认密码一致实现,Form验证
Form验证的原理
首先用户在注册界面提交表单,后台收到表单之后通过request.post取到数据然后传入已经写好的Form类
执行obj.is_valid()这里的obj为Form的实例,在Form类里面对字段一个一个进行验证先执行正则匹配然后执行clean方法
这里的clean方法就是一个钩子,但是不能在验证某个字段的时候调用其他字段,原因是这个时候其他字段不能确定是否验证完成了
需要在所有字段验证之后再执行这个钩子(clean方法)具体实现方法如下:
________________________________________________views.py______________________________________________________
if request.method == "POST":
check_obj = account.Register(request.POST)
if check_obj.is_valid():
username = check_obj.cleaned_data.get('username') #验证之后的值存放在check_obj.cleaned_data里面
password = check_obj.cleaned_data.get('password')
email = check_obj.cleaned_data.get('email')
—————————————————————————————————————————————————Register—————————————————————————————————————————————————————————
from django.forms import fields as ac_fields
from django import forms as ac_forms
from django.core.exceptions import ValidationError class Register(ac_forms.Form):
username = ac_fields.CharField(error_messages={'required': '用户名不能为空'})
#password = ac_fields.CharField(error_messages={'required': '密码不能为空'})
password = ac_fields.RegexField(
'^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$', #这里正则匹配验证要求密码了里面包含字母、数字、特殊字符
min_length=12,
max_length=32,
error_messages={'required': '密码不能为空.',
'invalid': '密码必须包含数字,字母、特殊字符',
'min_length': "密码长度不能小于8个字符",
'max_length': "密码长度不能大于32个字符"}
)
repassword = ac_fields.CharField(error_messages={'required': '确认密码不能为空'})
email = ac_fields.CharField(error_messages={'required': '邮箱不能为空', 'invalid':'邮箱格式错误'})
check_code = ac_fields.CharField(error_messages={'required': '验证码不能为空',
'invalid': '邮箱格式错误'})
def clean(self):
pwd1 = self.cleaned_data.get('password')
pwd2 = self.cleaned_data.get('repassword')
if pwd1==pwd2:
pass
else:
from django.core.exceptions import ValidationError #这里异常模块导入要放在函数里面,放到文件开头有时会报错,找不到
raise ValidationError('密码输入不一致') 然后验证之后如果两次密码不相同,那么触发的ValidationError会放到公共错误里面: check_obj.errors['__all__'] 或者
check_obj.errors[NON_FIELD_ERRORS]
但是在前端不识别check_obj.errors.__all__,所以前端需要使用:check_obj.non_field_errors(其他正常字段的取法:check_obj.errors.username.0)
知识点补充:
form = trouble_createFrom({'title':obj1.title,'detail':obj1.detail})
form = trouble_createFrom(initial={'title':obj1.title,'detail':obj1.detail})
加initial与不加的区别,加了initial之后Form不做验证,不会吧错误信息展示到error里面
v = Trouble.objects.filter(id=nid,status=1).update(**form.cleaned_data)
这里的v代表的是收影响的行数,若v为0则代表修改没有生效
在form里使用日期插件 django.forms.extras.widgets import SelectDateWidge
然后在前端页面导入
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" />
能解决日期插件格式不对齐的问题
django登录注册验证之密码包含特殊字符,确认密码一致实现,Form验证的更多相关文章
- oracle之用户名密码包含特殊字符时候怎么使用sqlplus登录
oracle有时候用户密码包含一些特殊字符直接登录会报错,需要使用以下方式登录sqlplus sqlplus 'username/"password"' PS:整体使用单引号括起来 ...
- django 登录注册注销
一.设计数据模型 1.数据库模型设计 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息.很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息: 用户名 密码 邮箱地址 性别 ...
- [oldboy-django][2深入django]登录注册页面验证码
后台生成随机验证码 #验证码生成 - 在login.html 中有一张验证码图片 设置图片的src url, 相当于发送一次get请求,返回的内容为图片渲染的内容 <div class=&quo ...
- Django实现注册
前言 对于web开来说,用户登陆.注册.文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性:对于web ...
- Android项目实战登录&注册
由于项目中大部分界面都有一个后退键和一个标题栏,为避免代码冗杂以及便于利用,我们可以将后推荐和标题栏单独抽取出来定义一个标题栏布局,在 res/layout 目录下新建一个 Layout resour ...
- Django 登陆注册实现
路由层 from django.conf.urls import url from django.contrib import admin from app01 import views urlpat ...
- Android项目实战登录&注册
由于项目中大部分界面都有一个后退键和一个标题栏,为避免代码冗杂以及便于利用,我们可以将后推荐和标题栏单独抽取出来定义一个标题栏布局,在 res/layout 目录下新建一个 Layout resour ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- django 的form登录 注册
#!/usr/bin/env python # -*- coding: utf8 -*- #__Author: "Skiler Hao" #date: 2017/3/30 15:4 ...
随机推荐
- 用Java 实现断点续传 (HTTP)
在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...
- hdu 1695 欧拉函数+容斥原理
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- springboot(二).springboot整合logback用于日志输出
springboot整合logback用于日志输出 我们项目的基本框架已经完成,http请求已经可以访问,现在给我们的框架添加日志记录的功能并能将每天的记录记录到文件中去 在这里,我们使用logbac ...
- Eclipse怎样对项目进行重命名?
当创建一个项目时,可能会随便命名一个项目名,如果想要项目名更有意义,或者为了方便后续项目的命名,怎么重命名项目名呢? 第一步在我们的电脑打开eclipse软件,找到需要重命名的项目,如下图所示: 第二 ...
- DVWA--XSS(stored)
XSS 0X01 1.简介 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式 ...
- [CSP-S模拟测试]:优化(贪心+DP)
题目描述 $visit\text{_}world$发现有下优化问题可以用很平凡的技巧解决,所以他给你分享了这样一道题:现在有长度为$N$的整数序列$\{ a_i\}$,你需要从中选出$K$个不想叫的连 ...
- NOIP2009靶形数独(暴搜)
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z博士请教,Z博士拿出了他最近发明 ...
- 实验报告二&第四周学习总结
一.实验目的: (1) 掌握类的定义,熟悉属性.构造函数.方法的调用,掌握用类作为类型声明变量和方法返回值: (2) 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性: (3 ...
- React Native商城项目实战01 - 初始化设置
1.创建项目 $ react-native init BuyDemo 2.导入图片资源 安卓:把文件夹放到/android/app/src/main/res/目录下,如图: iOS: Xcode打开工 ...
- Git-Runoob:Git 教程
ylbtech-Git-Runoob:Git 教程 1.返回顶部 1. Git 教程 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torva ...