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实现bitmap数据结构详解
Feb 17 Python
Python获取单个程序CPU使用情况趋势图
Mar 10 Python
Python中type的构造函数参数含义说明
Jun 21 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
python图书管理系统
Apr 05 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
Python实现TCP通信的示例代码
Sep 09 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
Python requests设置代理的方法步骤
Feb 23 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
python数据分析数据标准化及离散化详解
2018/02/26 Python
python 多线程重启方法
2019/02/18 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
同学聚会欢迎辞
2014/01/14 职场文书
发展部经理职责规定
2014/02/22 职场文书
元旦寄语大全
2014/04/10 职场文书
个人自荐材料
2014/05/23 职场文书
上海世博会口号
2014/06/19 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
python实现网络五子棋
2021/04/11 Python
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python