Django集成celery发送异步邮件实例


Posted in Python onDecember 17, 2019

安装依赖

pip install django-celery-beat
pip install django-celery-email
pip install celery
pip install msgpack-python
pip install msgpack

在settings文件中配置

添加app应用到installed_apps中

"djcelery_email",
 "django_celery_beat"

修改.env文件配置:

#邮箱后端,使用celery email
DJANGO_EMAIL_BACKEND=djcelery_email.backends.CeleryEmailBackend
DJANGO_EMAIL_HOST=smtp.qq.com
DJANGO_EMAIL_HOST_USER=xxx@qq.com # 您的邮箱号
DJANGO_EMAIL_HOST_PASSWORD=你的邮箱密码
DJANGO_DEFAULT_FROM_EMAIL=默认发送的邮箱号

#CELERY
CELERY_BROKER_URL=redis://127.0.0.1:6379/1 #使用redis 1作为消息代理
CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/2 #把任务结果放在redis2库中

添加配置项:

# Celery
# ------------------------------------------------------------------------------
if USE_TZ:
 # http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-timezone
 CELERY_TIMEZONE = TIME_ZONE
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-broker_url
CELERY_BROKER_URL = env("CELERY_BROKER_URL")
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-result_backend
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-accept_content
CELERY_ACCEPT_CONTENT = ["json", 'msgpack']
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_serializer
CELERY_TASK_SERIALIZER = "msgpack"
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-result_serializer
CELERY_RESULT_SERIALIZER = "json"
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-time-limit
# TODO: set to whatever value is adequate in your circumstances
CELERY_TASK_TIME_LIMIT = 5 * 60
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-soft-time-limit
# TODO: set to whatever value is adequate in your circumstances
CELERY_TASK_SOFT_TIME_LIMIT = 60
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#beat-scheduler
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"


EMAIL_BACKEND = env(
 "DJANGO_EMAIL_BACKEND", default="djcelery_email.backends.CeleryEmailBackend"
)

添加邮箱配置项:

EMAIL_HOST = env('DJANGO_EMAIL_HOST', default="smtp.qq.com")
EMAIL_USE_SSL = env('DJANGO_EMAIL_USE_SSL', default=True)
EMAIL_PORT = env('DJANGO_EMAIL_PORT', default=465)
EMAIL_HOST_USER = env('DJANGO_EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = env('DJANGO_EMAIL_HOST_PASSWORD')
DEFAULT_FROM_EMAIL = env('DJANGO_DEFAULT_FROM_EMAIL')

编写celery文件

在项目配置的目录下新增celery_app.py文件

import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")

app = Celery("你的项目名")

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object("django.conf:settings", namespace="CELERY")

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

在某app目录下新增tasks.py文件:

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

from config import celery_app

# 打上装饰器celery就会自动搜索到添加到任务中
@celery_app.task()
def send_activity_verify_email():
 """异步发送新订单邮件"""
 title = '[学时通] 您有一个新活动等待审核'
 message = '您有一个新活动等待审核,请进入学时通管理系统查看'
 send_mail(title, message=message, from_email=settings.DEFAULT_FROM_EMAIL,
    recipient_list=settings.EMAIL_RECIPIENT_LIST)

启动celery

来到项目目录下:

执行以下命令

其中config为我的项目配置目录,config.celery_app指我项目配置目录下的celery_app文件

$ /usr/local/python3/bin/celery -A config.celery_app worker -l info

Django集成celery发送异步邮件实例

当点击发送邮件时,celery会把任务添加到redis 1库中,邮箱发送完毕后,会在redis 2库中显示结果。

以上这篇Django集成celery发送异步邮件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python文件操作之目录遍历实例分析
May 20 Python
Python正则表达式知识汇总
Sep 22 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
Python3.5基础之NumPy模块的使用图文与实例详解
Apr 24 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
详解Django定时任务模块设计与实践
Jul 24 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
python学生信息管理系统实现代码
Dec 17 #Python
pymysql模块的操作实例
Dec 17 #Python
Django异步任务线程池实现原理
Dec 17 #Python
python 求10个数的平均数实例
Dec 16 #Python
python 经典数字滤波实例
Dec 16 #Python
Python实现把类当做字典来访问
Dec 16 #Python
python中p-value的实现方式
Dec 16 #Python
You might like
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
Mac下安装vue
2018/04/11 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python3 assert断言实现原理解析
2020/03/02 Python
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
简单说说tomcat的配置
2013/05/28 面试题
广告业务员岗位职责
2014/02/06 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
2014年稽查工作总结
2014/12/20 职场文书
陕西导游词
2015/02/04 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
Redis性能监控的实现
2021/07/09 Redis