Django+Celery+Redis實現異步任務(發送郵件)


安裝如下依賴庫

pip install Celery
pip install django-celery
pip install django-redis

還要安裝本地的Redis服務

settings.py 文件中添加如下代碼(需要163郵箱開通SMTP服務)

import djcelery
djcelery.setup_loader()

BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'your mail@163.com'
EMAIL_HOST_PASSWORD = 'your password'
EMAIL_FROM = '<your mail@163.com>'
EMAIL_TO = 'send to@xxx.com'


INSTALLED_APPS = (
      
    ...
    'djcelery'
)
 

與settings.py同級目錄下的__init__.py添加如下代碼

import celery
from .celery import app as celery_app

在settings.py同級目錄下創建celery.py,並添加如下代碼

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
app = Celery('myshop')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

在你的app目錄下創建tasks.py,並添加你需要執行的任務(在這里是發送郵件)

# coding: utf-8
from celery import task
from django.core.mail import send_mail
from .models import Order
from myshop import settings


@task()
def send_email():
    """
    Task to send an e-mail notification when an order is successfully created.
    """
    title = 'Django發送郵件'
    message = ('本郵件為程序所發,請忽視').decode('utf-8')
    mail_sent = send_mail(title, message, settings.EMAIL_FROM, [settings.EMAIL_TO])
    return mail_sent

在你的view.py中調用,執行該任務

from .tasks import order_createddef order(request):

  .....     
# launch asynchronous task   send_email.delay(order.id)
  .....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM