#!/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登录 注册的更多相关文章

  1. Django实现用户登录注册

    本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...

  2. django项目一 登录注册

    STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] AUTH_USER_MODEL = 'cr ...

  3. django实现简易登录注册

    经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...

  4. django的form 登录组件

    1. 了解form 组件的原理 1.建立好form组件 class>>> 2.了解需要先is_valid() 判断是否可以取值 成功 form.cleaned_data 查看成功认证 ...

  5. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  6. form组件注册ajax登录auth认证及验证码

    本项目采用django自带的数据库 项目文件 models.py from django.db import models from django.contrib.auth.models import ...

  7. Django+pycharm+mysql 实现用户登录/注册(Django五)

    首先是让Django项目与mysql数据库初步建立连接 具体做法见:pycharm连接mysql(注意其中第二步MySQL驱动最好安装最新版的) 这里讲一下我在做这一步遇到的问题.一般Driver 那 ...

  8. Django项目登录注册系统

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  9. Django基础——Form&Ajax篇

    一 Form 在实际的生产环境中,登录和注册时用户提交的数据浏览器端都会使用JavaScript来进行验证(比如验证输入是否为空以及输入是否合法),但是浏览器可能会禁用JavaScirpt,同时也有人 ...

随机推荐

  1. 【转载】 tf.Print() (------------ tensorflow中的print函数)

    原文地址: https://blog.csdn.net/weixin_36670529/article/details/100191674 ------------------------------ ...

  2. java多线程(二)线程的生命周期

    1.   线程生命周期 新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)5种状态. 1.1. 新建 l  new关键字创建了一个线程之后,该线 ...

  3. WordtoPdfUtil word转pdf

    jar: <dependency> <groupId>com.jacob</groupId> <artifactId>jacob</artifac ...

  4. 【APM】Pinpoint 使用教程(二)

    本例介绍Pinpoint使用教程 Pinpoint安装部署参考:[APM]Pinpoint 安装部署(一) 查看应用调用关系拓扑图 进入pintpoint->选择应用-〉选择查看的时间周期,即可 ...

  5. nginx 分离配置文件 conf.d和default.conf

    1. 在 nginx.conf 文件中引用 conf.d 下的所有配置文件 #在http配置节的末尾添加配置引用 http { ... #gzip on; include /etc/nginx/con ...

  6. squid4

    主机上的squid一直是傻瓜型使用,yum安装.默认配置.千年不动.突然漏扫出来3.X版本不能用了,搜了下,得升4.神奇的发现centos7的源(阿里源)里面竟然最高只有3.网上搜使用yum装的也都是 ...

  7. https本地自签名证书添加到信任证书访问

    1.背景 本文适用于基于https(http+ssl)的网站通信.本地调试等,上线是请寻找免费 ssl证书申请. 本地调试过程中,一些特殊的场景需要我使用http+ssl通信,比如在Chrome中使用 ...

  8. 定时杀死mysql中sleep的进程

    #!/bin/sh date=`date +%Y%m%d\[%H:%M:%S]` n=`mysqladmin -uroot -p** processlist | grep -i sleep | wc ...

  9. python/shell代码片段

    查看某模块路径 Bash pip show --files selenium 文件编码转换 Bash convmv -f GBK -t UTF-8 --notest -r ydcz_1/ 查找当前目录 ...

  10. 关于千里马招标网知道创宇反爬虫521状态码的解决方案(python代码模拟js生成cookie _clearence值)

    一.问题发现 近期我在做代理池的时候,发现了一种以前没有见过的反爬虫机制.当我用常规的requests.get(url)方法对目标网页进行爬取时,其返回的状态码(status_code)为521,这是 ...