Django+Celery+Redis 异步发送邮件

前几天写了一个项目需要利用Django来发送邮件,还有手机短信,因为以前就用Django+celery发送过邮件,今天在这里面写一下Django和celery的配置

我们先下载所需要的模块

# 这是我用到的版本,目前在运行,没有报错和警告
pip3 install celery==3.1.26
pip3 install Django==3.1.3
pip3 install redis==2.10.6

 

接着我们在项目名的同名目录下创建一个 celery.py 的 .py 文件(文件内容如下)

# -*- coding: utf-8 -*-
from __future__ import absolute_import
import os
from celery import Celery

# 只要是想在自己的脚本中访问Django的数据库等文件就必须配置Django的环境变量
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'opwf.settings')

# app名字
app = Celery('workflow')

# # 配置celery
class Config:
    BROKER_URL = 'redis://127.0.0.1:6379/2'
    CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/3'

app.config_from_object(Config)


# 到各个APP里自动发现tasks.py文件
app.autodiscover_tasks(settings.INSTALLED_APPS)

然后还在项目名的同名目录下的 init.py 文件里面写入我们的某一些需要初始化的东西

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

#导包
import pymysql
#初始化
pymysql.install_as_MySQLdb()

 

 

紧接着我们在要用的 celery 的 app 中创建一个 tasks.py 里面要写入我们要用到的函数,还有导入一些模块

我这个是工单发送邮件的,没有涉及到隐私我就把代码放上面来了(这只是简单的测试代码

# 绝对引用,使我们的celery模块不会与原始的celery冲突
from __future__ import absolute_import, unicode_literals
# 导入原始的celery模块中shared_task    from xx import xx
from celery import shared_task
# 使用django内置函数发送邮件
from django.core.mail import send_mail
# 导入django的settings
from django.conf import settings


@shared_task
def sendEmail(email,text):
    ret = '工单助手提醒您:{}'.format(text)
    my_email = send_mail('工单', ret, settings.DEFAULT_FROM_EMAIL, [email])
    print(my_email,"nict try")
    return my_email

Redis在上面已经配置好了,也就两行代码 celery.py 里面

 

接着我们就该启动 celery 

celery -A 项目名 worker -l info

views.py 里面的调用不需要多说吧

函数名.delay(参数)

 

posted @ 2020-12-05 11:37  这是春天吧  阅读(170)  评论(1)    收藏  举报