【愚公系列】2022年01月 Django商城项目15-用户中心-发送邮件验证功能实现

举报
愚公搬代码 发表于 2022/01/22 19:06:10 2022/01/22
【摘要】 前言邮箱进行验证主要是为了保证联系信息的有效性,方便您后续找回用户名、密码,同时也可以让您及时接收到系统的相关操作消息。所以邮箱验证是很重要的一个功能。 一、相关代码 1.业务逻辑相关代码class EmailView(LoginRequiredJSONMixin,View): def get(self,request): data = json.loads(reque...

前言

邮箱进行验证主要是为了保证联系信息的有效性,方便您后续找回用户名、密码,同时也可以让您及时接收到系统的相关操作消息。所以邮箱验证是很重要的一个功能。

一、相关代码

1.业务逻辑相关代码

class EmailView(LoginRequiredJSONMixin,View):

    def get(self,request):
        data = json.loads(request.body.decode())
        email = data.get('email')

        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',email):
            return http.JsonResponse({'code':RETCODE.PARAMERR,'errmsg':'参数错误'})

        try:
            request.user.email=email
            request.user.save()
        except Exception as e:
            return http.JsonResponse({'code':RETCODE.DBERR,'errmsg':'数据保存失败'})

        verify_url = active_email_url(email,request.user.id)
		# celery发送邮件
        from celery_tasks.email.tasks import send_active_email
        send_active_email.delay(email,verify_url)

        return http.JsonResponse({'code':RETCODE.OK,'errmsg':'ok'})

2.celery发送邮件相关代码

from django.core.mail import send_mail
from DJ_MeiDuo import settings
from celery_tasks.main import app

@app.task(bind=True)
def send_active_email(self,email,verify_url):

    # subject, message, from_email, recipient_list,
    # subject,   主题
    subject = '小徐商场激活邮件'
    # message,  邮件内容
    message = ''
    # from_email,  谁发送的
    from_email = settings.EMAIL_FROM
    # recipient_list, 收件人列表
    recipient_list = [email]
    # 有格式的内容
    html_message = '<p>尊敬的用户您好!</p>' \
                   '<p>感谢您使用小徐商城。</p>' \
                   '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
                   '<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url)
    try:
        send_mail(
            subject=subject,
            message=message,
            from_email=from_email,
            recipient_list=recipient_list,
            html_message=html_message
        )
    except Exception as e:
        self.retry(exc=e)

调用django的邮箱发送需要在setting下配置

# 指定邮件发送后端
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 邮件服务器
EMAIL_HOST = 'smtp.qq.com'
# smtp 默认端口号是 25
EMAIL_PORT = 25
#发送邮件的邮箱
EMAIL_HOST_USER = '2528877987@qq.com'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '自己的授权码'
#收件人看到的发件人
EMAIL_FROM = '小徐商城<2528877987@qq.com>'

启动celery

celery -A celery_tasks.main worker -l info -P gevent

在这里插入图片描述
邮件发送成功
在这里插入图片描述

3.激活邮件相关代码

class EmailActiveView(View):

    def get(self,request):
        token = request.GET.get('token')
        if token is None:
            return http.HttpResponseBadRequest('缺少参数')
        user = check_email_active_token(token)
        if user is None:
            return http.HttpResponseBadRequest('没有此用户')
        user.email_active=True
        user.save()
        return redirect(reverse('users:center'))

至此邮件激活成功

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。