django 的form登录 注册
#!/usr/bin/env python
# -*- coding: utf8 -*-
#__Author: "Skiler Hao"
#date: 2017/3/30 15:40
from django.core.exceptions import ValidationError #抛出异常
from django import forms
from django.forms import fields
from django.forms import widgets #内部有插件 用于密码什么二次验证
from django.core.validators import RegexValidator #定义正则表达式
from respository import models class RegisterForm(forms.Form):
username = fields.CharField(
#limit_cjoices_to={"username__in":["alex","egon']} 补充##针对select的所有queryset做筛选,用于foreignkey,manaytomany字段
required=True,
widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '用户名为8-12个字符'}),
min_length=6,
max_length=12,
strip=True,
error_messages={'required': '标题不能为空',
'min_length': '用户名最少为6个字符',
'max_length': '用户名最不超过为20个字符'},
)
email = fields.EmailField(
required=True,
widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '请输入邮箱'}),
strip=True,
error_messages={'required': '邮箱不能为空',
'invalid':'请输入正确的邮箱格式'},
)
pwd = fields.CharField(
widget=widgets.PasswordInput(attrs={'class': "form-control",'placeholder': '请输入密码,必须包含数字,字母,特殊字符'},render_value=True),
required=True,
min_length=6,
max_length=12,
strip=True,
validators=[
# 下面的正则内容一目了然,我就不注释了
RegexValidator(r'((?=.*\d))^.{6,12}$', '必须包含数字'),
RegexValidator(r'((?=.*[a-zA-Z]))^.{6,12}$', '必须包含字母'),
RegexValidator(r'((?=.*[^a-zA-Z0-9]))^.{6,12}$', '必须包含特殊字符'),
RegexValidator(r'^.(\S){6,10}$', '密码不能包含空白字符'),
], #用于对密码的正则验证
error_messages={'required': '密码不能为空!',
'min_length': '密码最少为6个字符',
'max_length': '密码最多不超过为12个字符!',},
)
pwd_again = fields.CharField(
#render_value会对于PasswordInput,错误是否清空密码输入框内容,默认为清除,我改为不清楚
widget=widgets.PasswordInput(attrs={'class': "form-control",'placeholder': '请再次输入密码!'},render_value=True),
required=True,
strip=True,
error_messages={'required': '请再次输入密码!',} ) def clean_username(self):
# 对username的扩展验证,查找用户是否已经存在
username = self.cleaned_data.get('username')
users = models.User.objects.filter(username=username).count()
if users:
raise ValidationError('用户已经存在!')
return username def clean_email(self):
# 对email的扩展验证,查找用户是否已经存在
email = self.cleaned_data.get('email')
email_count = models.User.objects.filter(email=email).count() #从数据库中查找是否用户已经存在
if email_count:
raise ValidationError('该邮箱已经注册!')
return email def _clean_new_password2(self): #查看两次密码是否一致
password1 = self.cleaned_data.get('pwd')
password2 = self.cleaned_data.get('pwd_again')
if password1 and password2:
if password1 != password2:
# self.error_dict['pwd_again'] = '两次密码不匹配'
raise ValidationError('两次密码不匹配!') def clean(self):
#是基于form对象的验证,字段全部验证通过会调用clean函数进行验证
self._clean_new_password2() #简单的调用而已 class loginForm(forms.Form):
username = fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '请输入用户名'}),
min_length=6,
max_length=12,
strip=True,
error_messages={'required': '用户名不能为空',}
) pwd = fields.CharField(
widget=widgets.PasswordInput(attrs={'class': "form-control",'placeholder': '请输入密码'}),
required=True,
min_length=6,
max_length=12,
strip=True,
error_messages={'required': '密码不能为空!',}
) def clean(self):
username = self.cleaned_data.get('username')
pwd = self.cleaned_data.get('pwd')
user = models.User.objects.filter(username=username).first()
if username and pwd:
if not user : # self.error_dict['pwd_again'] = '两次密码不匹配'
raise ValidationError('用户名不存在!')
elif pwd != user.password:
raise ValidationError('密码不正确!') forms.py
django 的form登录 注册的更多相关文章
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
- django项目一 登录注册
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] AUTH_USER_MODEL = 'cr ...
- django实现简易登录注册
经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...
- django的form 登录组件
1. 了解form 组件的原理 1.建立好form组件 class>>> 2.了解需要先is_valid() 判断是否可以取值 成功 form.cleaned_data 查看成功认证 ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...
- form组件注册ajax登录auth认证及验证码
本项目采用django自带的数据库 项目文件 models.py from django.db import models from django.contrib.auth.models import ...
- Django+pycharm+mysql 实现用户登录/注册(Django五)
首先是让Django项目与mysql数据库初步建立连接 具体做法见:pycharm连接mysql(注意其中第二步MySQL驱动最好安装最新版的) 这里讲一下我在做这一步遇到的问题.一般Driver 那 ...
- Django项目登录注册系统
Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...
- Django基础——Form&Ajax篇
一 Form 在实际的生产环境中,登录和注册时用户提交的数据浏览器端都会使用JavaScript来进行验证(比如验证输入是否为空以及输入是否合法),但是浏览器可能会禁用JavaScirpt,同时也有人 ...
随机推荐
- Java 8之Map新增方法<转>
在Java 8中的Map.Entry接口中增加了comparingByKey, comparingByValue方法,它们都返回Comparator<Map.Entry<K,V>&g ...
- 配置Pods和containers--为Containers和Pods分配CPU资源
指定CPU请求和CPU限制 要为容器指定CPU请求,在容器资源清单中使用resources:requests字段.要指定CPU限制,使用resources:limits. cpu-request-li ...
- laydate.render报错:日期格式不合法
在使用laydate渲染日期时: laydate.render({ elem: '#day' }); 提示日期格式不合法 需要使用 too.dateType()来包装 <input type=& ...
- 导出excel按照指定格式
1.项目有个需求,要按照特定格式 导出Excel表格. 正常的都是一行 ,下面是数据.这次有个变动,就是每隔 几列要换行,下面是数据.在下面是数据部分.花了一上午写了下需求,不难但是花时间 //实现特 ...
- 金钱数友好显示 php版本
2019年6月28日16:35:10 此方法可扩展性较好 /* * 吧金额数字转成可视化的方便读的汉字表述 */ function amountConversion(float $amount = 0 ...
- 设置table表格的单元格间距两种方式
table表格里设置单元格td之间的间距,通常用cellspacing设置单元格间距,有时候该属性可能无效,或需要用其他方式时,可用其他方式实现,例如在背景是白色背景的时候,设置单元格td的borde ...
- C++ & OpenCV 零散学习总结
OpenCV中Mat基本用法: Mat类 (Matrix的缩写) 是OpenCV用于处理图像而引入的一个封装类.从功能上讲,Mat类在IplImage结构的基础上进一步增强,并且,由于引入C++高级编 ...
- 【笔试题】Overloading in Java
笔试题 Overloading in Java Question 1 以下程序的输出结果为( ). public class Test { public int getData() { return ...
- 【LEETCODE】66、字符串分类,hard级别,题目:32,72,76
package y2019.Algorithm.str.hard; import java.util.Stack; /** * @ProjectName: cutter-point * @Packag ...
- Docker之dockerfile制作jdk镜像
目的: Dockerfile简介 Dockerfile制作jdk镜像 Dockerfile简介 了解dockerfile之前要先了解Docker基本概念和使用可参考:https://www.cnblo ...