Django 2.1.7 Celery 4.3.0 异步发送邮件示例

原文链接:Django 2.1.7 Celery 4.3.0 异步发送邮件示例

相关篇章:

  • Django 2.1.7 Celery 4.3.0 示例,解决Task handler raised error: ValueError('not enough values to unp...
  • Django 2.1.7 集成Celery 4.3.0 从介绍到入门
  • Django 2.1.7 Celery 4.3.0 配置
  • Django 2.1.7 Celery 4.3.0 在项目中使用Celery
  • Django 2.1.7 Celery 4.3.0 调用任务(Calling Task)
  • Django 2.1.7 Celery 4.3.0 signatures 任务签名 以及 Primitives 任务执行流程 group 、chain
  • Django 2.1.7 Celery 4.3.0 Routing 任务队列路由功能
  • Django 2.1.7 Celery 4.3.0 Periodic Tasks 周期性任务调度

前面的篇章调用celery都是通过python3 manage.py shell的方式使用,而celery是作为一个单独的模块包的使用方式,并没有在django中使用,本篇章来看看Django中如何整体使用一下。

安装相关库

pip3 install -U Celery
pip3 install django-celery==3.3.0
pip3 install "celery[librabbitmq,redis,auth,msgpack]"

安装djcelery

在项目/settings.py中安装。

INSTALLED_APPS = (
  ...
  'djcelery',
}

celery_tasks包文件配置以及任务编写

创建celery_tasks的包文件,专门存放tasks.py任务脚本以及celery相关配置管理,文档结构如下:

Django 2.1.7 Celery 4.3.0 异步发送邮件示例_第1张图片

celery.py

from celery import Celery
from celery_tasks import celeryconfig # 导入celery配置文件

import os
# 为celery设置环境变量
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

## 创建celery app
app = Celery('celery_tasks')

# 从单独的配置模块中加载配置
app.config_from_object(celeryconfig)

# 设置app自动加载任务
app.autodiscover_tasks(['celery_tasks'])

celeryconfig.py

# 设置结果存储
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/9'

# 设置代理人broker
BROKER_URL = 'redis://127.0.0.1:6379/8'

tasks.py

from celery_tasks.celery import app as celery_app # 导入创建好的celery应用
from django.core.mail import send_mail # 使用django内置函数发送邮件
from django.conf import settings  # 导入django的配置

@celery_app.task
def send_mail_task(title,email,msg):
     # 使用django内置函数发送邮件
    send_mail(title, '', settings.EMAIL_FROM,[email],html_message=msg)

编写视图使用celery任务

  • 在assetinfo/views.py文件中创建视图sayhello。
from celery_tasks.tasks import send_mail_task # 导入celery任务

def sayhello(request):
    # 测试发送邮件
    title = '访问百度'
    msg = '访问百度'
    email = '35*****@qq.com'
    send_mail_task.delay(title,email,msg) # 使用delay调用任务

    return HttpResponse("hello world")
  • 在assetinfo/urls.py中配置。
urlpatterns = [
    # ex:/assetinfo/sayhello
    path('sayhello', views.sayhello, name='sayhello'),
]

迁移生成celery数据表

python3 manage.py migrate

启动celery服务进行测试

  • 启动django服务
    python3 manage.py runserver

  • 启动celery的worker
    celery -A celery_tasks worker -l info -P eventlet

  • 请求视图,然后查看celery执行任务的情况
    访问http://127.0.0.1:8000/assetinfo/sayhello

  • celery执行任务如下:

Django 2.1.7 Celery 4.3.0 异步发送邮件示例_第2张图片
  • 查看收到的邮件
Django 2.1.7 Celery 4.3.0 异步发送邮件示例_第3张图片
Django 2.1.7 Celery 4.3.0 异步发送邮件示例_第4张图片

你可能感兴趣的:(Django 2.1.7 Celery 4.3.0 异步发送邮件示例)