Django之用户注册
用户注册需要提交的信息包括:
用户名
邮箱
密码
确认密码
验证码
这里选择form表单提交信息,注册页面的响应函数就要分条件执行,get请求时要展示注册页面,post请求时要接收用户提交的信息,对信息格式、正确性、唯一性进行验证,如果有错误则返回错误信息,如果验证通过则将信息添加到数据库返回注册成功信息
在urls中添加路由
略
编写注册响应函数
这个响应函数主体为form验证,之后分成功或失败两种情况进行处理,由于在登录时也会有form表单验证,所以我们可以将form验证单独写到一个文件中,在注册或登录函数中再去引入
from django.core.exceptions import ValidationError
from django.core.exceptions import ValidationError
from django import forms as django_forms
from django.forms import fields as django_fields
from django.forms import widgets as django_widgets
from repository import models class BaseForm(object):
def __init__(self, request, *args, **kwargs):
self.request = request
super(BaseForm, self).__init__(*args, **kwargs) class RegisterForm(BaseForm,django_forms.Form):
username = django_fields.CharField(
min_length=6,
max_length=20,
error_messages={'required': '用户名不能为空.', 'min_length': "用户名长度不能小于6个字符", 'max_length': "用户名长度不能大于32个字符"}
) password = django_fields.RegexField(
'^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$',
min_length=12,
max_length=32,
error_messages={'required': '密码不能为空.',
'invalid': '密码必须包含数字,字母、特殊字符',
'min_length': "密码长度不能小于8个字符",
'max_length': "密码长度不能大于32个字符"}
)
confirm_pwd = django_fields.CharField() def clean(self):
v1 = self.cleaned_data['password']
v2 = self.cleaned_data['confirm_pwd']
if v1 == v2:
pass
else:
from django.core.exceptions import ValidationError,NON_FIELD_ERRORS
raise ValidationError('密码输入不一致')
Django没有密码字段,我们通过django_fields.RegexField自定义正则验证密码格式
要求:由数字和字母组成,并且要同时含有数字、字母和特殊字符,且长度要在8-32位之间
^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$
^ 匹配一行的开头位置
(?=.*[0-9]+$) 任意字符串后有一数字
(?=.*[a-zA-Z]+$) 任意字符串后有一字母
(?=.*[!@#$\%\^\&\*\(\)])任意字符串后有一特殊符号
[0-9a-zA-Z!@#$\%\^\&\*\(\)] {8,32} 由8-32位数字、字母和特殊字符组成
$ 匹配行结尾位置
cleaned_data 就是读取表单返回的值,返回类型为字典dict型
这里没有做唯一化验证
在注册函数里用form验证
form = LoginForm(request=request, data=request.POST)
if form.is_valid(): #验证判断,通过则将数据添加到数据库,并告知用户注册成功,不通过则返回错误信息
响应函数:
def register(request.):
v = RegisterForm(request.POST)
if v.is_valid():
pass
else:
v.errors['username']
v.errors['__all__']
v.errors[NON_FIELD_ERRORS]
v.errors{
__all__: [],
username: [],
password: [],
confirm_pwd: []
}
return render(request, 'register.html', {'v':v})
在html页面中使用{{v.errors.username.0}}展示用户名错误信息, {{v.non_field_errors}}展示所有错误信息
在登录页面和注册页面都会涉及到验证码,创建验证码图片,将图片写入到内存,用完即删,减少数据库操作。将随机的验证码字符串添加到session中,和用户发来的验证码做对比,这样可以实现一个用户一个专有验证码,各个用户验证码环节是独立的。
页面上的验证码还要有一个点击图片刷新的功能,这个功能一般情况下我们用ajax实现,还有一个有趣的方法,输入url页面其实有两次加载,第一次渲染页面,第二次通过img标签的src加载验证码图片,那我们可以在点击图片后对src对应的url添加?,添加?就是发送get请求重新执行生成验证码,这就实现了点击更换验证码图片的功能
<img src="/code.html" onclick="changeImg(this);">
<script>
function changeImg(ths) {
ths.src = ths.src + "?";
}
</script>
设置免登陆时间长度
在setting中全局设置SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期
在函数中局部设置 request.session.set_expiry(60 * 60 * 24 * 30) #单位为秒
Django之用户注册的更多相关文章
- Django: 之用户注册、缓存和静态网页
Django 用户注册系统 Django 的源码中已经有登录,退出,重设密码等相关的视图函数,在下面这个app中 django.contrib.auth 可以点击对应的版本查看相关源代码:1.9 1 ...
- Django实现用户注册登录
学习Django中:试着着写一个用户注册登录系统,开始搞事情 =====O(∩_∩)O哈哈~===== ================= Ubuntu python 2.7.12 Django 1. ...
- Django实战-用户注册和登陆系统
1.环境搭建和创建项目 1.环境搭建 每当我们开始一个新项目的时候,通常都会搭建一个全新.独立.隔离的项目环境,这样做的好处自然不必多说.有很多种建立项目虚拟环境的工具,使用比较普遍的是Python中 ...
- django实现用户注册、登录、退出
视图 from django.contrib import auth from django.contrib.auth.models import User from django.views.dec ...
- Django 简单用户注册
项目名 macboy app名 t1 1.项目macboy urls.py from django.conf.urls import url, include urlpatterns = [ url( ...
- 【Python】【Django】用户注册功能
GET方法前置步骤做完 stu.models.py 再其中创建需要用到的字段及对应数据库的表 # -*- coding: utf-8 -*- from __future__ import unicod ...
- django相关网站
记录django的学习笔记:http://www.cnblogs.com/qwj-sysu/tag/django/ uwsgi的文档:http://uwsgi-docs.readthedocs.io/ ...
- 【Python】Django CSRF问题
参考资料: Django Ajax CSRF 认证:http://www.ziqiangxuetang.com/django/django-csrf.html Python Post遇到csrftok ...
- Django+bootstrap+注册登录系统
转自:https://www.cnblogs.com/robindong/p/9610057.html Robin_D 博客园 首页 新随笔 联系 订阅 管理 随笔 - 10 文章 - 0 评论 ...
随机推荐
- 代码格式化工具---indent工具
indent工具,可以把代码格式化成某种风格. 通过命令:rpm -qa | grep indent 查看是否安装了indent工具. 若没有,可使用命令sudo apt-get install ...
- luogu P1046 陶陶摘苹果
二次联通门 : luoguP1046 /* 这个题好难..... 由苹果树可知 这应该是个树结构的题 所以很自然的想到了用树链剖分来搞一下 连边 最后查询以1为根节点的子树的权值和... 从前闲的没事 ...
- docker使用(一)
windows家庭版 安装docker 查看原文地址(侵删,这里只是保存一用 doceker和vmware发生冲突时 运行下面命令并重启电脑: bcdedit /set hypervisorlaunc ...
- fedora安装设置
添加视频解码rpmfusion源: sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-st ...
- LOJ#565. 「LibreOJ Round #10」mathematican 的二进制 分治,FFT,概率期望
原文链接www.cnblogs.com/zhouzhendong/p/LOJ565.html 前言 标算真是优美可惜这题直接暴力FFT算一算就solved了. 题解 首先,假装没有进位,考虑解决这个问 ...
- zabbix监控线
echo mntr | nc 127.0.0.1 2181获取mntr的信息 换成conf将获得conf信息,从中找出需要监控项 conf: clientPort:客户端端口号 dataDir:数据文 ...
- ICEM——倒角的处理
原视频下载地址: https://pan.baidu.com/s/1miHMOuk 密码: knc4
- UML图中时序图的基本用法
快速阅读 序列图主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送.接收消息,处理消息,返回消息的 时间流程顺序,也称为时序图. 里面用到的基本元素如下: 角色- ...
- HTML5+和MUI页面操作
最近总是碰到针对页面的一些操作,以下是针对webview的一些简单方法以及个人理解.更多详尽的内容请参考标准文档:http://www.html5plus.org/doc/zh_cn/webview. ...
- 三大框架 之 Struts2
目录 Struts2 Struts2简介 Struts2框架的作用 常见web层的框架 web框架特点 Struts2基本使用 Struts2执行流程 Struts2配置 struts2的加载顺序 P ...