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(参数)