1 #!/usr/bin/env python
  2 # -*- coding: utf8 -*-
  3 #__Author: "Skiler Hao"
  4 #date: 2017/3/30 15:40
  5 from django.core.exceptions import ValidationError  #抛出异常
  6 from django import forms
  7 from django.forms import fields
  8 from django.forms import widgets   #内部有插件 用于密码什么二次验证
  9 from django.core.validators import RegexValidator  #定义正则表达式
 10 from respository import models
 11
 12
 13 class RegisterForm(forms.Form):
 14     username = fields.CharField(       #limit_cjoices_to={"username__in":["alex","egon']}   补充##针对select的所有queryset做筛选,用于foreignkey,manaytomany字段
 15         required=True,
 16         widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '用户名为8-12个字符'}),
 17         min_length=6,
 18         max_length=12,
 19         strip=True,
 20         error_messages={'required': '标题不能为空',
 21                         'min_length': '用户名最少为6个字符',
 22                         'max_length': '用户名最不超过为20个字符'},
 23     )
 24     email = fields.EmailField(
 25         required=True,
 26         widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '请输入邮箱'}),
 27         strip=True,
 28         error_messages={'required': '邮箱不能为空',
 29                         'invalid':'请输入正确的邮箱格式'},
 30     )
 31     pwd = fields.CharField(
 32         widget=widgets.PasswordInput(attrs={'class': "form-control",'placeholder': '请输入密码,必须包含数字,字母,特殊字符'},render_value=True),
 33         required=True,
 34         min_length=6,
 35         max_length=12,
 36         strip=True,
 37         validators=[
 38             # 下面的正则内容一目了然,我就不注释了
 39             RegexValidator(r'((?=.*\d))^.{6,12}$', '必须包含数字'),
 40             RegexValidator(r'((?=.*[a-zA-Z]))^.{6,12}$', '必须包含字母'),
 41             RegexValidator(r'((?=.*[^a-zA-Z0-9]))^.{6,12}$', '必须包含特殊字符'),
 42             RegexValidator(r'^.(\S){6,10}$', '密码不能包含空白字符'),
 43         ], #用于对密码的正则验证
 44         error_messages={'required': '密码不能为空!',
 45                         'min_length': '密码最少为6个字符',
 46                         'max_length': '密码最多不超过为12个字符!',},
 47     )
 48     pwd_again = fields.CharField(
 49         #render_value会对于PasswordInput,错误是否清空密码输入框内容,默认为清除,我改为不清楚
 50         widget=widgets.PasswordInput(attrs={'class': "form-control",'placeholder': '请再次输入密码!'},render_value=True),
 51         required=True,
 52         strip=True,
 53         error_messages={'required': '请再次输入密码!',}
 54
 55     )
 56
 57     def clean_username(self):
 58         # 对username的扩展验证,查找用户是否已经存在
 59         username = self.cleaned_data.get('username')
 60         users = models.User.objects.filter(username=username).count()
 61         if users:
 62             raise ValidationError('用户已经存在!')
 63         return username
 64
 65     def clean_email(self):
 66         # 对email的扩展验证,查找用户是否已经存在
 67         email = self.cleaned_data.get('email')
 68         email_count = models.User.objects.filter(email=email).count() #从数据库中查找是否用户已经存在
 69         if email_count:
 70             raise ValidationError('该邮箱已经注册!')
 71         return email
 72
 73     def _clean_new_password2(self): #查看两次密码是否一致
 74         password1 = self.cleaned_data.get('pwd')
 75         password2 = self.cleaned_data.get('pwd_again')
 76         if password1 and password2:
 77             if password1 != password2:
 78                 # self.error_dict['pwd_again'] = '两次密码不匹配'
 79                 raise ValidationError('两次密码不匹配!')
 80
 81     def clean(self):
 82         #是基于form对象的验证,字段全部验证通过会调用clean函数进行验证
 83         self._clean_new_password2() #简单的调用而已
 84
 85
 86 class loginForm(forms.Form):
 87     username = fields.CharField(
 88         required=True,
 89         widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '请输入用户名'}),
 90         min_length=6,
 91         max_length=12,
 92         strip=True,
 93         error_messages={'required': '用户名不能为空',}
 94     )
 95
 96     pwd = fields.CharField(
 97         widget=widgets.PasswordInput(attrs={'class': "form-control",'placeholder': '请输入密码'}),
 98         required=True,
 99         min_length=6,
100         max_length=12,
101         strip=True,
102         error_messages={'required': '密码不能为空!',}
103     )
104
105     def clean(self):
106         username = self.cleaned_data.get('username')
107         pwd = self.cleaned_data.get('pwd')
108         user = models.User.objects.filter(username=username).first()
109         if username and pwd:
110             if not user :
111
112                 # self.error_dict['pwd_again'] = '两次密码不匹配'
113                 raise ValidationError('用户名不存在!')
114             elif pwd != user.password:
115                 raise ValidationError('密码不正确!')
116
117 forms.py

转载于:https://www.cnblogs.com/qlshao/p/8504450.html

django 的form登录 注册相关推荐

  1. Django写一个登录注册---001创建项目以及设计数据库

    Djanog开发小项目实践,众所周知,一个产品往往需要登录注册这些功能,所以我这里实现一下登录注册的开发. 使用pycharm(专业版)创建一个django项目,不是专业版看不到创建django的字样 ...

  2. Django1.6 用Form实现注册登录注销修改密码(含代码!)

    参照了潘军杰的博客,但他Django版本有点老了,改动了不少东西,总体来说参考价值还是很大的,点http://www.2goo.info/blog/panjj/Django/2010/06/05/94 ...

  3. Django练习——基于Mysql的登录注册功能界面(django模型、模板、表单简单应用)

    目录 1.创建 2.配置Mysql (1)连接数据库驱动 (2)创建表格 (3)创建迁移文件并同步到数据库 3.admin后台 (1)创建超级用户 (2)注册模型login_msg 4.路由与视图 4 ...

  4. 【Django 开发】面试招聘信息网站(用户登录注册投在线递简历)

    该文章收录专栏 -Django从(图文并茂轻松上手教程)专栏-!! ??内容: [Djang | 增删改查]学生系统案例 [Django | 项目搭建]快速搭建自己的项目 [Django | alla ...

  5. Django+xadmin 打造线上教育平台(二)登录-注册(重制)

    Django+xadmin 打造线上教育平台(二) 一.首页 1)views.py/index函数: def index(request):"""首页"&quo ...

  6. django的登录注册系统

    摘要 django框架本身自带有登录注册,也可以自己写登录注册,下面将介绍这这2种方式实登录注册 一.自己写登录注册登出 1.注册regist 注册采用的是form表单,提交到数据库,在登录的时候,查 ...

  7. Django(二)精美博客搭建(1)实现登录/注册功能

    前言 之前我们用Django框架做了一个很简单的个人博客搭建,不论是页面还是功能都很粗糙 所以从这篇开始我打算做一个比较完整的[个人博客网站],可能会分好几篇博客来讲述 等所有功能完善的差不多后,再考 ...

  8. Django实现auth模块下的登录注册与注销

    本文已发现bug,空密码可注册,空用户名报错等 及新功能,js警告空密码,用户名已被注册,密码账号错误等信息 已更新到文章:https://blog.csdn.net/s_kangkang_A/art ...

  9. Django相关操作(连续跳转和登录注册为例)

    虚拟环境的安装(VIRTUALENV) 安装virtualenv pip install virtualenv 创建虚拟环境 在本地创建一个叫env的文件夹,并且Cd到该文件夹下输入: virtual ...

最新文章

  1. java 构建是什么意思_构建的概念
  2. Http协议中的方法
  3. 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
  4. mysql 下载到其他盘中_MYSQL 如果把数据文件保存到其他磁盘里
  5. 业务类型创业公司,最好不要招程序员
  6. Java折叠_[Java教程]Jquery中菜单的展开和折叠
  7. 2013下半年(11月)信息系统项目管理师考试题型分析(综合知识、案例分析、论文)...
  8. failed to load resource the server responded with a status of 500 (internal server error)
  9. saveToken介绍二
  10. entity cannot be tracked
  11. 前端作品-漫威英雄响应式网站
  12. 深圳市居住证查询、办理政府网址
  13. win10网络诊断为DNS服务器未响应,Windows10网络诊断DNS服务器未响应的解决办法
  14. Java校验手机号格式
  15. matlab rti dds,[译]*RTI_DDS测试
  16. 100个python算法超详细讲解:委派任务
  17. 《指数基金投资指南》读书笔记_2022002
  18. 产品经理如何做好需求调研
  19. docker守护式安装tomcat(汤姆猫)报错:Error starting userland proxy: listen tcp 0.0.0.0:8888: bind: address alrea
  20. 如何查看自己电脑应该买什么样的内存条

热门文章

  1. Go语言介绍 安装 基础命令(一)
  2. Fiddler 自定义规则编写
  3. 使用 NCS2 异步推理——人脸识别
  4. Python print函数不换行操作
  5. Missing message for key xxx in bundle (default bundle) for locale zh_CN
  6. BZOJ 1087: [SCOI2005]互不侵犯King
  7. coredump调试的使用
  8. 文本编辑器Nano实用快捷键
  9. C#窗体控件-组合框控件ComboBox
  10. 关于若干数据库数据插入性能的对比