安裝如下依賴庫
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)
.....
