#!/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

最新文章

  1. [翻译] AKKA笔记- ACTORSYSTEM (配置CONFIGURATION 与调度SCHEDULING) - 4(一)
  2. 设计模式23---设计模式之装饰模式(Decorator)(结构型)
  3. SharePoint2010主题和样式揭秘
  4. 微软在线测试题String reorder
  5. (转)Eclipse Shortcuts
  6. [原]此程序专用来说明C++模板的用法
  7. html5新标签布局应用指南
  8. copy和mutableCopy都是浅拷贝!!!------你被骗了很多年
  9. 网站开发进阶(二十二)HTML UI知识汇总(更新中...)
  10. python学习第31天
  11. Keystone, Start, Failed to Load Bson
  12. [20181015]为什么是3秒.txt
  13. oracle-查询-时间条件查询
  14. Chrome 百度搜索热点过滤插件 - 开源软件
  15. 通过修改CR0寄存器绕过SSDT驱动保护
  16. rabbitmq 二进制安装
  17. PL/SQ连接oracle,L 新建表的时候, virtual那一列是什么意思
  18. linux fack 文件系统修复命令
  19. [TJOI]2013 最长上升子序列
  20. 如何去除decimal后面的零?

热门文章

  1. JAVA中使用LDAP登录的三种方式
  2. Golang常见小细节总结(1)
  3. server computer (实验室移动服务器环境)
  4. jzy3D从入门到弃坑_2使用jzy3D0.9画2D散点图
  5. 使用Cloud Toolkit部署SpringBoot项目到服务器
  6. 【转】简谈基于FPGA的千兆以太网
  7. 033 SSM综合练习09--数据后台管理系统--基于AOP的日志处理
  8. fineui 实现下拉框模糊查询
  9. 使用IDEA的maven工程导入ojdbc14 jar包失败
  10. 高并发 多线程批量ping工具 nbping简介和使用