邮箱验证——异步任务实现发邮件

0、验证流程

在这里插入图片描述

1、网易邮箱获取相关参数

  • 获取授权码
    在这里插入图片描述
  • 往下滚动,获取参数信息
    在这里插入图片描述

2、配置Django工程的配置文件

后面构建异步任务的时候需要导过去使用

# 发送短信的相关设置, 这些设置是当用户没有发送相关字段时, 默认使用的内容:
# 发送短信必须进行的设置:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 我们使用的 smtp服务器 地址
EMAIL_HOST = 'smtp.163.com'
# 端口号
EMAIL_PORT = 25
# 下面的内容是可变的, 随后台设置的不同而改变:
# 发送邮件的邮箱
EMAIL_HOST_USER = '13317640978@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'AGQRHROEBNPEXEYB'
# 收件人看到的发件人
EMAIL_FROM = 'user_san<13317640978@163.com>'

# 邮箱验证链接(根据业务需求定)
EMAIL_VERIFY_URL = 'http://www.meiduo.site:8080/success_verify_email.html?token='

3、封装验证的url

加密方法SecretOauth().dumps()详见之前的文章:点我跳转

def generate_verify_email_url(request):
    """
    功能:生成验证的url
    :param request: 请求对象
    :return: 返回验证url
    """
    user = request.user

    token = SecretOauth().dumps({
        'user_id': user.id,
        'username': user.username,
        'email': user.email
    })

    verify_url = settings.EMAIL_VERIFY_URL + token

    return verify_url

4、构建发送邮件的异步任务

异步任务实现,详看之前文章:点我跳转
在这里插入图片描述
代码:

from celery_tasks.main import celery_app
from django.conf import settings
from django.core.mail import send_mail


@celery_app.task(name='send_verify_email')
def send_verify_email(email, verify_url):
    """
    功能:发送邮件
    :param to_email: 目标邮箱
    :param verify_url: 验证url
    :return: 1成,0失败
    """
    html_message = '<p>尊敬的用户您好!</p>' \
                   '<p>感谢您使用本商城。</p>' \
                   '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
                   '<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url)

    # 调用Django自带的发送邮件函数
    return send_mail(
                subject='这是一封验证身份的邮件',  # 邮件主题
                message='',
                from_email=settings.EMAIL_FROM,  # 收件人看到的发件人
                recipient_list=[email],  # 需要验证的邮箱号
                html_message=html_message
            )

5、异步任务执行文件,添加发送邮件这一任务

注意点
(1)之前文章我们实现异步发送短信验证码的时候,不需要用到配置文件的参数,因此不需要指定配置文件。
(2)但是这里需要用到发送邮件的服务器相关参数,所以需要将配置文件的参数设置为环境变量异步函数在执行的时候才能被异步程序识别到。
(3)如果不设置环境变量,会发生这样的错误:点我跳转

在这里插入图片描述

6、最终的新增邮箱并验证接口

代码:

# 新增用户邮箱
class EmialView(View, LoginRequiredJSONMixin):

    def put(self, request):

        data = json.loads(request.body.decode())
        email = data.get('email')
        user = request.user

        if not email:
            return JsonResponse({
                'code': 400,
                'errmsg': '缺少参数'
            }, status=400)

        if not re.match(r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', email):
            return JsonResponse({
                'code': 400,
                'errmsg': '邮箱格式有误'
            })
        try:
            user.email = email
            user.email_active = False
            user.save()
        except Exception as e:
            print(e)
            return JsonResponse({
                'code': 400,
                'errmsg': '修改邮箱。写入失败'
            })
        # TODO:新建邮箱成功,发送验证邮件
        #获取验证url
        verify_url = generate_verify_email_url(request)
        # 发送邮件任务(函数),使用异步方式调用
        send_verify_email.delay(email, verify_url)

        return JsonResponse({
            'cdoe': 0,
            'errmsg': 'OK'
        })

在异步任务执行文件main.py的上级目录,启动异步任务:

celery -A celery_tasks.main worker -l info

当用户在前端界面发送验证邮箱之后,用户会收到类似下面的邮件
在这里插入图片描述
点击验证的链接,会再一次发送请求给Django后端服务器,请求中会携带着之前加密的token,后端进行解密后,提取用户信息、邮箱号等等,和校验数据库的数据进行校验,校验成功则返回响应给前端,表示验证完毕(成功)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SV小项目-异步FIFO是一个简单的项目,旨在让学生理解FIFO缓存的原理和实现方式。 FIFO缓存是一种常用的数据存储方式,可以用于解决数据传输时的不匹配问题。在异步FIFO中,数据的写入和读取是异步的,意味着数据可以在任何时候写入或读取。这种异步的方式可以增加FIFO的灵活性,并且允许数据的写入和读取在不同的时钟域上应用。 这个小项目的主要目标是实现一个基于Verilog的异步FIFO模块,包括以下功能: 1. 内部缓存的储存和检索 2. 空和满指示器的生成 3. 数据的写入和读取 对于写入操作,当FIFO未满时,它将数据存储在内部缓存中,并更新其指针以指向下一个空位置。当缓存已满时,写入操作将被忽略,并且FIFO满指示器将被设置为高电平。同样,读取操作从内部缓存中检索数据,并将其指针更新以指向下一个位置。当缓存为空时,读操作将被忽略,并且FIFO空指示器将被设置为高电平。 在设计过程中,需要考虑解决的问题包括时序和异步信号的同步。时序问题可以通过FIFO指针和状态机解决,而异步信号可以通过信号同步器进行同步。此外,还需要考虑FIFO的读写顺序和存储器的尺寸,并确保FIFO模块的有效性和可靠性。 总之,通过实现SV异步FIFO项目,学生可以加深对FIFO缓存的理解,并学习基于Verilog的设计和实现。此外,学生还可以通过在项目中遇到的挑战来提高他们的编程和设计技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值