Django-邮箱验证

一、发送邮件

发送邮件功能也不仅仅可以用于邮箱验证,也可以在一些其他的场合使用,比如通知顾客新品上市。

1.1、setting设置:
# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smtp服务地址
EMAIL_HOST = 'smtp.qq.com'
# 端口默认都是25不需要修改
EMAIL_PORT = 25  
# 发送邮件的邮箱,需要配置开通SMTP
EMAIL_HOST_USER = '167616915@qq.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'psmqdtxvjkvbbicc'
# 收件人看到的发件人
EMAIL_FROM = 'lyj<167616915@qq.com>'
# 这⾥必须是True,否则发送不成功
EMAIL_USE_TLS = True 
1.2、视图函数设置:
from django.core.mail import send_mail
from django.conf import settingsdef send_email(request):# 想要发送的内容msg = '测试django发送邮箱'send_status = send_mail(# 发送邮件的主题subject='请注意这是Django邮件测试',# 发送的内容message=msg,# 发送邮件的邮箱from_email=settings.EMAIL_HOST_USER,# 把这条邮件信息发送给xxxx@qq.com的邮箱recipient_list=["1961558693@qq.com"]  )if send_status:return HttpResponse('测试邮件已发出请注意查收')

二、邮箱认证

邮箱认证主要是认证邮箱的真实性,我们不能确定这个邮箱是不是顾客自己的,是不是顾客自己编造的,所以我们需要认证一下

1.1、业务逻辑

1.处理⽤户注册数据,存⼊数据库,is_active字段设置为False,⽤户未认证之前不允许登陆

2.产⽣token,⽣成验证连接URL

3.发送验证邮件

4.⽤户通过认证邮箱点击验证连接,设置is_active字段为True,可以登陆

5.若验证连接过期,删除⽤户在数据库中的注册信息,允许⽤户重新注册 (username、email字段具有唯⼀性)

1.2、产生token
from itsdangerous import URLSafeTimedSerializer as utsr
import base64
from django.conf import settings as django_settingsclass Token:def __init__(self, security_key):self.security_key = security_key# 盐是秘钥的编码self.salt = base64.encodebytes(security_key.encode('utf-8'))# 生成token,token中可以保存一段信息,这里我们选择保存usernamedef generate_validate_token(self, username):serializer = utsr(self.security_key)return serializer.dumps(username, self.salt)# 验证tokendef confirm_validate_token(self, token, expiration=3600):serializer = utsr(self.security_key)return serializer.loads(token, salt=self.salt, max_age=expiration)# 删除tokendef remove_validate_token(self, token):serializer = utsr(self.security_key)print(serializer.loads(token, salt=self.salt))return serializer.loads(token, salt=self.salt)# 定义为全剧变量,而且我们可以看到这里是将我们的setting中的一个字符串作为salt进行的加密
token_confirm = Token(django_settings.SECRET_KEY)
1.3、配置urls
urlpatterns = [path('token/', views.token, name='token'),path('get_token/',views.get_token,name='get_token'),
]
1.4、配置视图函数
def token(request,tokenstr):try:username = token_confirm.confirm_validate_token(tokenstr)except:username = token_confirm.remove_validate_token(tokenstr)'''此处进行复杂的逻辑验证,验证通过的话激活用户'''return HttpResponse(username)def get_token(request):url = 'http:127.0.0.1:8000/app/token/' + token_confirm.generate_validate_token(username='username')'''此处将这个url发送到客户邮箱,我们这里就不进行邮件发送的操作了'''return HttpResponse(url)
1.5、验证

我们访问http://127.0.0.1:8000/app/get_token/的到网址http:127.0.0.1:8000/app/token/InVzZXJuYW1lIg.YgX3GQ.mczVD57iF1e1_Rnuuhyf_hTN84M,我们再次访问这个网址得到我们的username,再次去数据库查询,查询到这个username并且此用户的状态为未激活,那我们就激活它


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部