django_01项目 异步发送邮箱验证码
对于发送邮件这种耗时操作,会产生阻塞。我们为了不影响后面代码的执行需要将发送邮件采用异步方案操作
用到的是: RabbitMQ和Celery
设计模式选择: 生产者消费者模式
目录:
步骤:
· 在项目主目录下创建一个包(celery_tasks)
· config.py存放celery的配置
· main.py中创建celery实例,加载配置,注册celery任务
· email包下的tasks.py编写处理发送邮件的业务逻辑。(对于异步任务的主要业务逻辑都放在具体某一个包中的tasks.py中)
1):celery_tasks.config.py
# 指定消息队列的位置,这里采用的是RabbitMQ默认提供的账户 broker_url= 'amqp://guest:guest@localhost:5672'
2):celery_tasks.main.py
# celery启动文件 from celery import Celery #因为进程之间数据不是互通的所以为了让celery使用django配置文件需要进行设置 import os if not os.getenv('DJANGO_SETTINGS_MODULE'): os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev' # 创建celery实例 celery_app = Celery('meiduo') # 加载celery配置 celery_app.config_from_object('celery_tasks.config') # 自动注册celery任务 celery_app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email'])
3):celery_tasks.email.tasks.py
from django.conf import settings from django.core.mail import send_mail from celery_tasks.main import celery_app import logging logger = logging.getLogger('django') @celery_app.task(bind=True, name='send_verify_email', retry_backoff=3) def send_verify_email(self, to_email, verify_url): """ 发送验证邮箱邮件 :param to_email: 收件人邮箱 :param verify_url: 验证链接 :return: None """ subject = 'xx给你发的验证码' html_message = '<p>尊敬的用户您好!</p>' \ '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \ '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url) try: send_mail(subject, "", settings.EMAIL_FROM, [to_email], html_message=html_message) except Exception as e: logger.error(e) # 有异常自动重试三次 raise self.retry(exc=e, max_retries=3)
注意,对于异步操作的方法我们需要使用celery实例对象.task()方法进行装饰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)