今天是 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 项目跑起来,测试效果,速度提升了很多