django celery redis 异步发送邮件

今天是  2019.10.19

需求: django celery redis 发送邮件,提高用户体验

环境 ubantu 19.04 + python3.6 + django 2.2 + redis 3.3  + celery 4.3

开始本教程前确保本机安装有 redis 且开启服务

 

1.  QQ邮箱 - 设置 - 获取授权码 

 

2.django 项目总配置文件settings.py文件中进行如下配置

# 邮件服务器配置
EMAIL_HOST = 'smtp.qq.com'  # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = '1978912861@qq.com'  # 在这里填入您的QQ邮箱账号
EMAIL_HOST_PASSWORD = 'vpktcfsnbaji'  # 请在这里填上您自己邮箱的授权码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
EMAIL_USE_SSL = True

3. 与你的应用同级建立celery_tasks目录,目录下新建两个文件__init__.py 以及 tasks.py文件

 

4. __init__.py文件保证该目录是一个包,里面不需要有内容,tasks.py文件中内容如下,作参考,这就是一个任务函数,可自定义

from celery import Celery
from django.core.mail import send_mail
from django.conf import settings

# 创建celery应用对象
app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/4')


@app.task
def send_register_success_email(email_receiver, user_name):
    print("发送邮件")
    subject = "亲爱的用户{}, 恭喜您注册chilly博客成功".format(user_name) #title
    message = "亲爱的用户{}, 恭喜您注册chilly博客成功".format(user_name)  #content
    from_email = settings.EMAIL_HOST_USER
    rec = ["1978912861@qq.com"]
    send_mail(subject, message, from_email,  rec )

5.在你视图函数views.py中, 用户数据校验通过并且验证通过后,调用该任务函数发送邮件

send_register_success_email.delay(email_receiver, user_name)

注意,send_register_success_email 是函数对象,经过 @app.task 装饰后增加了方法 delay,一定要记得调用delay方法,否则后续你会怀疑人生,各种纠结任务怎么没有发出,本人在这里卡了2个多小时,

 

6.将该项目代码复制一份,在tasks.py文件顶部加入下面代码,只需要加入前四行就够了 第二行中的的chilly_blog记得换上你的项目名称

import os 
os.environ["DJANGO_SETTINGS_MODULE"] = "chilly_blog.settings"
import django
django.setup()

from celery import Celery
from django.core.mail import send_mail
from django.conf import settings

# 创建celery应用对象
app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/4')

7.然后重启一个窗口, cd 到 项目目录下, 执行命令 ,让worker跑起来。

其中 celery_tasks.tasks 为我们上面编写的任务函数的路径

celery -A celery_tasks.tasks worker -l info

 

8. python3 manage.py runserver 项目跑起来,测试效果,速度提升了很多

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值