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 相关文章推荐
Python2.x中文乱码问题解决方法
Jun 02 Python
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
Python iter()函数用法实例分析
Mar 17 Python
基于Python log 的正确打开方式
Apr 28 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
如何用Python徒手写线性回归
Jan 25 Python
Python如何识别银行卡卡号?
Jun 10 Python
Python学习之迭代器详解
Apr 01 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模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
php自定义apk安装包实例
2014/10/20 PHP
php获取根域名方法汇总
2014/10/28 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
PyTorch基本数据类型(一)
2019/05/22 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
保送生自荐信范文
2013/10/06 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
会计学专业求职信
2014/07/17 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
用电申请报告范文
2015/05/18 职场文书
社区干部培训心得体会
2016/01/06 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers