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

1
2
url(r '^register/$' , reg, name = 'reg' ),
url(r '^activate/(?P<token>\w+.[-_\w]*\w+.[-_\w]*\w+)/$' ,     activate,name = 'activate' ),

#注册视图函数 user/views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

转载于:https://www.cnblogs.com/learning-skills/p/7459242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值