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 settings

def 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_settings

class Token:
    def __init__(self, security_key):
        self.security_key = security_key
        # 盐是秘钥的编码
        self.salt = base64.encodebytes(security_key.encode('utf-8'))

    # 生成token,token中可以保存一段信息,这里我们选择保存username
    def generate_validate_token(self, username):
        serializer = utsr(self.security_key)
        return serializer.dumps(username, self.salt)

    # 验证token
    def confirm_validate_token(self, token, expiration=3600):
        serializer = utsr(self.security_key)
        return serializer.loads(token, salt=self.salt, max_age=expiration)

    # 删除token
    def 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/<str:tokenstr>', 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并且此用户的状态为未激活,那我们就激活它

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值