Django用户注册、邮箱验证实践
算法流程如下:
1)处理用户注册数据,存入数据库,is_activity字段设置为False,用户未认证之前不允许登陆
2)产生token,生成验证连接URL
3)发送验证邮件
4)用户通过认证邮箱点击验证连接,激活is_activity字段,可以登录
5)若验证连接过期,删除用户在数据库中的注册信息。
#系统root邮箱 settings.py
EMAIL_HOST = 'smtp.qq.com'
EMAIL_HOST_USER = '17********@qq.com'
#授权码
EMAIL_HOST_PASSWORD = 'dxsblqtqohiycgcb'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
#可以域名,可以设置本地
DOMAIN = 'http://127.0.0.1:8000'
#注册相关路由 url.py
url(r'^register/$', reg, name='reg'),
url(r'^activate/(?P<token>\w+.[-_\w]*\w+.[-_\w]*\w+)/$', activate,name='activate'),
#注册视图函数 user/views.py
def reg(request):
try:
if request.method == 'POST':
print request.method
register_form = RegForm(request.POST)
if register_form.is_valid():
print '数据验证通过!'
username=register_form.cleaned_data['username']
email=register_form.cleaned_data['email']
password=register_form.cleaned_data['password']
user = UserProfile.objects.create(
username=username,
email=email,
password = password,
)
user.save()
print '注册信息保存成功!'
# 邮箱验证
token = token_confirm.generate_validate_token(username)
token_url = '/'.join([django_settings.DOMAIN, 'activate', token])
message = "\n".join([u'{0},欢迎加入XX'.format(username), u'请访问该链接,完成用户验证:',u"< a href = "+token_url+u" > "+token_url+u" < / a > " ])
send_mail(u'注册用户验证信息', message, '17******@qq.com', [email], fail_silently=False)
return render(request, 'common/success.html', {'reason': u"已将激活链接发送到您的注册邮箱,请登录激活,有效期为1个小时"})
else:
return render(request, 'common/failure.html', {'reason': register_form.errors})
else:
register_form = RegForm()
except Exception as e:
print '错误',e
#用户点击邮箱链接,账户激活 user/views.py
def activate(request, token):
try:
username = token_confirm.confirm_validate_token(token)
except:#令牌过期
username = token_confirm.remove_validate_token(token)
users = UserProfile.objects.filter(username=username)
for user in users:
user.delete()#删除注册用户
return render(request, 'common/failure.html', {
'reason': u'对不起,验证链接已经过期,请重新<a href=\"' + unicode(django_settings.DOMAIN) + u'/register\">注册</a>'})
try:
user = UserProfile.objects.get(username=username)
except UserProfile.DoesNotExist:
return render(request, 'common/failure.html', {'reason': u"对不起,您所验证的用户不存在,请重新注册"})
user.is_active = True
user.save()
message = u'终于等到你!账号激活成功,可以进行<a href=\"' + unicode(django_settings.DOMAIN) + u'/login\">登录</a>操作'
return render(request, 'common/success.html', {'reason': message})
参考:https://my.oschina.net/keyven/blog/726123
Django用户注册、邮箱验证实践的更多相关文章
- PHP用户注册邮箱验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- 【Python】Django【邮箱验证】 后端验证如何生成 token加密验证码 与如何解码!!!!
1.生成token验证码方案 ,使用itsdangerous 大宝剑, 可以序列化出验证码,并能设置过期时间 安装 itsdangerous pip install itsdangerous ...
- ThinkPHP 3.2 用户注册邮箱验证帐号找回密码
一.前言 当然现在有的网站也有手机短信的方式找回密码,原理就是通过发送验证码来验明正身,和发送邮件验证一样,最终还是要通过重置密码来完成找回密码的流程. 本文将使用PHP+Mysql+jQuery来实 ...
- ThinkPHP 3.2 用户注册邮箱验证激活帐号
本文将结合实例,讲解如何使用PHP+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 业务流程 1.用户提交注册信息. 2.写入数据库,此时帐号状态未激活. 3.将用户名 ...
- (进阶篇)PHP实现用户注册后邮箱验证,激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- PHP用户注册邮箱并验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 查 ...
- JavaMai——邮箱验证用户注册
这篇文章简单的模拟了网上利用邮箱激活用户注册这样的一个功能 1. 呈现给用户的注册界面:(为了简单起见,就剩下两个输入域,邮箱和昵称) <%@ page language="java& ...
- Django商城项目笔记No.15用户部分-用户中心邮箱验证
首先增加前端页面success_verify_email.html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- java实现邮箱验证的功能
在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件来验证,邮件的话大概会是下面这个样子的: 用户通过点击链接从而完成注册,然后才能登录. 也许你会想,为什么 ...
随机推荐
- Android DRM
最近在了解Android DRM相关的一些知识,下面转一个ARM大佬分享的内容: 前言 本文简略地介绍了如何在Android下实现DRM(Digital Rights Management, 数字版权 ...
- svn密码 在服务端 到底是明文保存,还是密文保存
svn密码 在服务端 到底是明文保存,还是密文保存 之前在ubuntu上搭建svn服务端,记得密码就是明文保存的, 但最近项目,我们老大说,他搭建的是加密后的,我就比较纳闷了, 经过偷偷的瞄一下,不就 ...
- poj 2125(最小割)
题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连 ...
- Docker入门与应用系列(一)介绍与部署
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- php读取xml的神器
<?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> <name ...
- sql duplicate key
本文来自:高爽,转载请注明. 向数据库插入记录时,有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是saveOrUpdate操作.这种控制可以放在业务层,也可以放在数据库 ...
- iOS学习笔记(九)——xml数据解析
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...
- linux下软件的安装与卸载
一 软件安装包的类型 通常Linux应用软件的安装有五种: 1) tar+ gz包,如software-1.2.3-1.tar.gz.他是使用UNIX系统的打包工具tar打包的. 2) r ...
- 记录-Hibernate+servlet实现简单的增、删、查、改
由于需要对Hibernate作个了解,所以写了个简单的实现 以上是大概目录 1.新建Hibernate.cfg.xml配置文件 <?xml version='1.0' encoding='UTF ...
- bfs_迷宫求最短路径
宽度优先搜索按照距离开始状态由近及远的顺序进行搜索,可以很容易用来求解最短路径或者最少操作等问题. 将已经访问过的状态用标记管理起来,便可以很好地做到由近及远的搜索. import java.util ...