返回顶部
首页 > 资讯 > 后端开发 > Python >在Django中进行用户注册和邮箱验证的方法
  • 171
分享到

在Django中进行用户注册和邮箱验证的方法

用户注册邮箱方法 2022-06-04 19:06:42 171人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本文主要介绍我在利用Django写文章时,采用的注册方法。首先说一下整体逻辑思路: •处理用户注册数据, •产生token,生成验证URL, •发送验证邮件, &

本文主要介绍我在利用Django写文章时,采用的注册方法。首先说一下整体逻辑思路:

•处理用户注册数据,

•产生token,生成验证URL,

•发送验证邮件,

•用户登录网址,进行验证,

•验证处理。

具体步骤:

1、添加用户

在DjanGo中自带的User表中,有一个is_active字段,默认值是True,即用户填完表单提交之后,就可以进行登录。我们这里首先将is_acitve字段设为False,也就是说,必须经过后续的邮箱验证,才能够正常登录。

部分代码:


if request.method == 'POST':
fORM = CustomUserCreationForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
#new_user = form.save()
username,passWord,email = cd['username'],cd['password1'],cd['email']
user = User.objects.create(username=username, password=password, email=email, is_active=False)
user.set_password(password)
user.save() 

提交后,数据库中会增加一条记录,但is_acitve字段为False,此时还不是有效用户。

2、邮件验证

邮件验证主要有两步,一是产证token,即加密,二是处理验证链接。

1)产生token

之前我采用的是简单的base64加解密方法, 但终究是太简单了,后来看到关于flask的验证用户的文章(Http://python.jobbole.com/81410/),就采用了itsdangerous序列化方法,其实Flask的session就用了itsdangerous序列化。我使用它的重要原因是它自带有一个时间戳,而且序列化方法要比单纯的使用base64给力得多。

代码:


from itsdangerous import URLSafeTimedSerializer as utsr
import base64
import re

class Token():


def __init__(self,security_key):
self.security_key = security_key
self.salt = base64.encodestring(security_key)
def generate_validate_token(self,username):
serializer = utsr(self.security_key)
return serializer.dumps(username,self.salt)
def confirm_validate_token(self,token,expiration=3600):
serializer = utsr(self.security_key)
return serializer.loads(token,
salt=self.salt,
max_age=expiration) 

security_key就是settings.py中设置的SECRET_KEY,salt是经过base64加密的SECRET_KEY, generate_validate_token函数通过URLSafeTimedSerializer在用户注册时生成一个令牌。用户名在令牌中被编了码。生成令牌之后,会将带有token的验证链接发送到注册邮箱。在confirm_validate_token函数中,只要令牌没过期,那它就会返回一个用户名,过期时间为3600秒。

发送邮件函数代码:


token = token_confirm.generate_validate_token(username)
#active_key = base64.encodestring(username)
#send email to the reGISter email
message = "n".join([
u'{0},欢迎加入我的博客'.format(username),
u'请访问该链接,完成用户验证:',
'/'.join([DOMAIN,'account/activate',token])
])
send_mail(u'注册用户验证信息',message, None,[email]) 

2)处理邮件验证

就是对应验证链接的视图函数,该函数的主要目的是将User表中用户的is_active字段更新为True。


def active_user(request,token):
username = token_confirm.confirm_validate_token(token)
user = User.objects.get(username=username)
user.is_active = True
user.save() 

这里要说一下url的设置。经过itsdangerous产生的token是随机且规律的,说它规律是因为它是由三部分组成,并由点号隔开。类似这样:Imhibm4i.Cg-UAQ.n7ZI2N9kUZ1eOcfBtxlMOdOYYE0。说它随机是因为每一部分的内容可能不仅仅含有字母数字,可能还含有连接符-,_。因此url应该是:url(r'^account/activate/(?P<token>w+.[-_w]*w+.[-_w]*w+)/$','blog.views.active_user',name='active_user')

经过上述操作后,用户就可以利用刚注册的用户名进行登录了。

贴出完整代码:


from utils.token import Token
from django.core.mail import send_mail
from .forms import UserLoginForm,CustomUserCreationForm
token_confirm = Token(SECRET_KEY)

def Register(request):


if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
#new_user = form.save()
username,password,email = cd['username'],cd['password1'],cd['email']
user = User.objects.create(username=username, password=password, email=email, is_active=False)
user.set_password(password)
user.save()
token = token_confirm.generate_validate_token(username)
#active_key = base64.encodestring(username)
#send email to the register email
message = "n".join([
u'{0},欢迎加入我的博客'.format(username),
u'请访问该链接,完成用户验证:',
'/'.join([DOMAIN,'account/activate',token])
])
send_mail(u'注册用户验证信息',message, None,[cd['email']])
#user = auth.authenticate(username=username,password=password)
#auth.login(request,user)
return HttpResponse(u"请登录到注册邮箱中验证用户,有效期为1个小时。")
else:
form = CustomUserCreationForm()
return render(request,'register.html',{'form':form})
def active_user(request,token):
"""
the view function is used to accomplish the user register confirm,only after input the link
that sent to the register email,user can login the site normally.
:param request:
:param activate_key:the paragram is gotten by encrypting username when user register
:return:
"""
try:
username = token_confirm.confirm_validate_token(token)
except:
return HttpResponse(u'对不起,验证链接已经过期')
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return HttpResponse(u'对不起,您所验证的用户不存在,请重新注册')
user.is_active = True
user.save()
confirm = u'验证成功,请进行登录操作。'
return HttpResponseRedirect('/account/login',{'confirm':confirm})

以上所述是小编给大家介绍的在Django中进行用户注册和邮箱验证的方法,希望对大家有所帮助!

--结束END--

本文标题: 在Django中进行用户注册和邮箱验证的方法

本文链接: https://lsjlt.com/news/14924.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Django中进行用户注册和邮箱验证的方法
    本文主要介绍我在利用Django写文章时,采用的注册方法。首先说一下整体逻辑思路: •处理用户注册数据, •产生token,生成验证URL, •发送验证邮件, &...
    99+
    2022-06-04
    用户注册 邮箱 方法
  • django注册用邮箱发送验证码的实现
    视图代码 lis = []#设置一个空列表用来存放发送的验证码,用来验证 def yzm1(): res1 = "" for i in range(4):#用四...
    99+
    2024-04-02
  • 使用django怎么实现发送验证码注册邮箱
    这篇文章将为大家详细讲解有关使用django怎么实现发送验证码注册邮箱,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。视图代码lis = []#设置一个空列表用来存放发送的...
    99+
    2023-06-14
  • Android studio 利用共享存储进行用户的注册和登录验证功能
      //注册功能 public class MainActivity extends AppCompatActivity { //声明共享存储(全局变量) p...
    99+
    2024-04-02
  • 如何在GitLab中去掉账户添加时的邮箱验证程序
    随着科技的不断发展,人们在工作中越来越多地依赖于互联网和计算机软件。在软件开发领域中,GitLab是一种非常流行的代码托管平台。GitLab管理员负责管理GitLab账户,包括添加新账户和修改现有账户的权限。在添加新账户时,GitLab通常...
    99+
    2023-10-22
  • 如何在SQLServer中进行用户身份验证和授权管理
    在SQL Server中进行用户身份验证和授权管理是非常重要的,以确保数据库的安全性和数据的保护。以下是一些常见的方法来实现用户身份...
    99+
    2024-04-09
    SQLServer
  • 关闭wordpress新用户注册邮件通知的方法
    本文实例讲述了关闭wordpress新用户注册邮件通知的方法。分享给大家供大家参考。具体分析如下: wordpress博客每次有新用户注册都会给我们管理邮箱发一邮件告诉你有新用户注册了,那么如果我们不想接受要如何取消呢,...
    99+
    2022-06-12
    关闭 wordpress 新用户 注册 邮件 通知 方法
  • WordPress修改新用户注册邮件内容的方法
    本文实例讲述了如何修改WordPress新用户注册邮件内容,因为系统发送的邮件是纯文本类型的,页面不太美观,又没有办法发送自定义的HTML格式的邮件,将修改方法分享给大家供大家参考。具体方法如下: 最简单的办法 方法一、...
    99+
    2022-06-12
    WordPress 修改 新用户 注册邮件 内容 方法
  • 如何在PHP中实现用户注册时发送短信验证码
    随着移动互联网的普及,手机号码已经成为用户注册和登录的重要凭证之一。为了保证用户账号的安全性,很多网站和应用都会在用户注册时发送短信验证码进行验证。本文将介绍如何在PHP中实现用户注册时发送短信验证码的功能,并附上具体的代码示例。一、创建短...
    99+
    2023-10-21
    PHP 短信验证码 用户注册
  • xp网络身份验证在注册表中具体的添加方法
    为了工作的需要,远程桌面连接时必不可少的,现在的连接中有时候需要网络身份验证,在xp系统中原本是没有的,在Windows XP SP3已经增加了这个功能,但是用户一直没有发现,其实是因为Windows XP SP3并未自...
    99+
    2023-06-02
    xp 网络身份验证 注册表 身份验证 网络 添加 方法
  • 使用JWT在PHP API接口中进行身份验证的方法
    在 Web 开发中,最常见的需求之一就是用户身份验证。为了实现安全的身份验证,Web 开发者可以依赖于许多不同的机制。其中一种很受欢迎的方法是 JSON Web Tokens(JWT),它提供了一种基于令牌的身份验证方法。 在本...
    99+
    2024-01-22
    API PHP jwt
  • 不用注册会员也能为DedeCms增加邮箱订阅的方法
    为了与朋友们更好的交流,也为了朋友们更好的关注我的个人网站,网站添加了邮箱订阅,其实织梦自带有订阅,但是只能是注册会员,如果不是会员没办法订阅的,我们只能另想办法,现在就有了。您在我网站底部可以看到有“订阅到...
    99+
    2022-06-12
    DedeCms 邮箱订阅 注册会员
  • 如何在PHP中实现用户注册时发送手机验证码和短信通知
    概述:在用户注册过程中,为了保证账户安全性,通常会要求用户进行手机验证。本文将介绍如何使用PHP编程语言实现用户注册时发送手机验证码和短信通知的功能。我们将使用阿里云短信服务作为示例,但也可适应其他短信服务提供商。前提条件:已有阿里云账户,...
    99+
    2023-10-21
    PHP 短信通知 用户注册 手机验证码
  • discuz论坛用户通过邮件验证的设置方法[图文]
    这几天发现许多用户遇到邮件发送不了的问题,他们在后台调试时都出现如(邮件发送返回错误信息:)的提示。今天我做了个小测试,在本地进行的。 用户注册完后提示邮件发送成功,但是后来检测没有。后来找到了解决的办法,总结下来供大...
    99+
    2022-06-12
    discuz 邮件验证
  • 在javascript中进行多行注释的方法
    本篇内容主要讲解“在javascript中进行多行注释的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在javascript中进行多行注释的方法”吧!在javascript中进行多行注释的方...
    99+
    2023-06-14
  • xp网络身份验证在注册表中具体的添加方法是怎样的
    这期内容当中小编将会给大家带来有关xp网络身份验证在注册表中具体的添加方法是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了工作的需要,远程桌面连接时必不可少的,现在的连接中有时候需要网络身份验证...
    99+
    2023-06-14
  • 在vue中使用rules对表单字段进行验证方式
    目录1. 写在 data 中验证表单内容data 数据2. 写在行内表单内容3. 引入外部定义的规则vue 中表单字段验证的写法和方式有多种,本篇文章介绍三种较为常用的验证方式。 1...
    99+
    2024-04-02
  • SpringBoot中验证用户上传的图片资源的方法
    允许用户上传图片资源(头像,发帖)是APP常见的需求,特别需要把用户的资源IO到磁盘情况下,需要防止坏人提交一些非法的文件,例如木马,webshell,可执行程序等等。这类非法文件不...
    99+
    2024-04-02
  • 用户体验在SEO中的作用和优化方法是什么
    用户体验在SEO中的作用和优化方法涵盖了三个主要方面:一、用户体验对SEO的影响;二、用户体验的重要元素;三、用户体验优化方法。其中,用户体验对SEO的影响展现在搜索引擎对网站的友好性、内容质量和互动性的重视。例如,通过提供更易于导航和阅读...
    99+
    2023-10-29
    作用 方法 用户
  • Java自定义注解在登录验证的应用方法是什么
    这篇文章主要讲解了“Java自定义注解在登录验证的应用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java自定义注解在登录验证的应用方法是什么”吧!java注解从 JDK 5开始...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作