前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年01月 Django商城项目15-用户中心-发送邮件验证功能实现

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

作者头像
愚公搬代码
发布2022-01-24 10:37:54
3290
发布2022-01-24 10:37:54
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


前言

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

一、相关代码

1.业务逻辑相关代码

代码语言:javascript
复制
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发送邮件相关代码

代码语言:javascript
复制
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 = '尊敬的用户您好!' \
                   '感谢您使用小徐商城。' \
                   '您的邮箱为:%s 。请点击此链接激活您的邮箱:' \
                   '%s' % (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下配置

代码语言:javascript
复制
# 指定邮件发送后端
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

代码语言:javascript
复制
celery -A celery_tasks.main worker -l info -P gevent
在这里插入图片描述
在这里插入图片描述

邮件发送成功

在这里插入图片描述
在这里插入图片描述

3.激活邮件相关代码

代码语言:javascript
复制
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'))

至此邮件激活成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/01/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、相关代码
    • 1.业务逻辑相关代码
      • 2.celery发送邮件相关代码
        • 3.激活邮件相关代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档