#!/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. TCP报文结构

    来自:https://blog.csdn.net/qq_32998153/article/details/79680704

  2. 封装redis操作 php版本

    <?php namespace App\Service; use App\Service\BaseService; use Illuminate\Support\Facades\Redis; / ...

  3. CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)

    一.安装方式介绍 1.yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能 ...

  4. shell 编写脚本批量Ping IP

    服务器总是一下子买了很多的段的ip.通过绑定后,也不知道这些ip是否绑定成功,所以就写了一个shell脚本,把ip输好,批量ping一下,看是不是都能ping通. 脚本如下: 此外.还有一个ip文件, ...

  5. LeetCode 406. 根据身高重建队列(Queue Reconstruction by Height) 46

    406. 根据身高重建队列 406. Queue Reconstruction by Height 题目描述 假设有打乱顺序的一群人站成一个队列.每个人由一个整数对 (h, k) 表示,其中 h 是这 ...

  6. 【剑指offer】删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1->2->3->3->4->4->5 处理后为 ...

  7. was unable to refresh its cache! status = Cannot execute request on any known server

    出现这种错误是因为: Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为. 在 yml中设置 eureka.client.register-with-eu ...

  8. 6. 运行Spark SQL CLI

    Spark SQL CLI可以很方便的在本地运行Hive元数据服务以及从命令行执行任务查询.需要注意的是,Spark SQL CLI不能与Thrift JDBC服务交互.在Spark目录下执行如下命令 ...

  9. FMX 隐藏任务栏 xe10

    找了好多信息,测试好些,xe10  隐藏只要以下命令 隐藏 ShowWindow(ApplicationHWND, SW_HIDE); 显示 ShowWindow(ApplicationHWND, S ...

  10. Golang资料集

    <Platform-native GUI library for Go> 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X ...