环境:centos7+django2+redis+celery
一、首先安装redis和celery.
pip install celery
pip intsall redis
pip install django-redis
- 启动service redis start | systemctl start redis
- 编辑redis配置文件 vim /etc/redis.conf
- 参看redis进程 ps -aux | grep redis
- 密码修改方法:vim .etc/redis.conf 找到 #requirepass foobared 这句。后面添加 requirepass yoursecret#你的密码。重启rsystemctl restart redis。当然也可以不设置
更多redis配置,请通往官方文档学习。中文网址http://www.redis.cn/。英文官网https://redis.io/
二、在创建的appa目录文件下面创建一个tasks.py.【一定要是这个名字】。
from __future__ import absolute_import, unicode_literals
from celery import shared_task
from django.core.mail import send_mail
import logging
logger = logging.getLogger(__name__)
@shared_task
def celery_send_email(subject, message, from_email, recipient_list, **kwrags):
try:
# 使用celery并发处理邮件发送的任务
logger.info("\n开始发送邮件")
send_mail(subject, message, from_email, recipient_list, **kwrags)
logger.info("邮件发送成功")
return 'success!'
except Exception as e:
logger.error("邮件发送失败: {}".format(e))
注意:第一行最好是:from __future__ import absolute_import, unicode_literals.不然容易出错。
三、在setting.py同目录中添加celery.py文件。
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 为celery程序设置DJANGO_SETTINGS_MODULE环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名字.settings')
app = Celery('project_name')
# 从Django的设置文件中导入CELERY设置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 从所有已注册的app中加载任务模块
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
四、找到setting.py同目录中的__init__.py文件
from __future__ import absolute_import, unicode_literals
# 这将保证celery app总能在django应用启动时启动
from .celery import app as celery_app
__all__ = ['celery_app']
五、打开setting.py文件添加
#扣扣邮箱验证
# 邮件配置
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = 'xxx@qq.com' # 你的 QQ 账号
EMAIL_HOST_PASSWORD = '' #你的授权密码。具体在设置--账号里面,一定要打开POP3服务。
# 默认邮件
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
#celery配置
CELERY_BROKER_URL = 'redis://localhost:6379' #celery中间人 redis://redis服务所在的ip地址:端口/数据库号
CELERY_RESULT_BACKEND = 'redis://localhost:6379'#celery结果返回,可用于跟踪结果
#celery内容等消息的格式设置
#: Only add pickle to this list if your broker is secured
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
#celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = 'Asia/Shanghai'
六、在views.py文件里添加视图文件
from django.http import HttpResponse
from your_product import setting
from celery_test.tasks import celery_send_email<br><br>
def add_task_to_celery(request):
email = ''#需要发送邮件的邮箱地址
celery_send_email.delay(u'邮件主题', '邮箱内容', setting.DEFAULT_FROM_EMAIL, [email])
return HttpResponse('hello world')
七、在url.py文件中添加发送邮箱的路由
from django.contrib import admin
from django.urls import path
from your_urls import views #导入你的视图文件路径
urlpatterns = [
path('admin/', admin.site.urls),
path('send_email/', views.add_task_to_celery, name='send_email'),
]
八、在manage.py同级目录执行如下命令, 启动celery的worker进程(主要用于消费或执行任务)
celery -A your_projectName worker --loglevel=info
参考博客:
https://www.cnblogs.com/wumingxiaoyao/p/8515075.html
https://blog.youkuaiyun.com/qq_32868151/article/details/78937719
https://blog.youkuaiyun.com/xiaohuoche175/article/details/81480576

本文介绍了如何在CentOS7环境下,利用Django、Redis和Celery搭建异步发送邮件的系统。详细步骤包括安装相关库、配置Redis、创建tasks.py文件、设置Celery和Django的集成,以及启动Celery worker进行任务消费。参考了多个博客资源进行操作。
1203

被折叠的 条评论
为什么被折叠?



