【发布时间】:2022-01-04 00:05:53
【问题描述】:
我有一个带有 django rest 框架的 api。
该 api 用于用户注册。注册后 api 将向用户发送验证电子邮件,但发送电子邮件需要一些时间,所以为此我想在后台发送电子邮件。
对于这个要求应该是什么方法?
【问题讨论】:
-
是啊,继续吃芹菜...
标签: django django-rest-framework celery
我有一个带有 django rest 框架的 api。
该 api 用于用户注册。注册后 api 将向用户发送验证电子邮件,但发送电子邮件需要一些时间,所以为此我想在后台发送电子邮件。
对于这个要求应该是什么方法?
【问题讨论】:
标签: django django-rest-framework celery
这应该是您完成要执行的任务的方法。
from celery import Celery
import os
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings')
app = Celery('example')
app.config_from_object(settings, namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
CELERY_BROKER_URL = 'redis://{}:{}'.format(REDIS_SERVER_HOST, REDIS_SERVER_PORT)
CELERY_RESULT_BACKEND = 'redis://{}:{}'.format(REDIS_SERVER_HOST, REDIS_SERVER_PORT)
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
确保启动 Redis 服务器并为 REDIS_SERVER_HOST 和 REDIS_SERVER_PORT 变量分配适当的值。
from .celery import app as celery_app
__all__ = ['celery_app']
from example import celery_app
from django.core.mail import send_mail
@celery_app.task
def send_celery_email(self, recipient_list):
# your actual mail function
send_mail("subject", "message", from_email = 'test@gmail.com', recipient_list = [recipient_list])
celery -A project worker --loglevel=info
from .task import send_celery_email
send_celery_email.delay(recipient_list = [])
注意:这只是工作流程的路线图,实际代码可能会根据您的要求和 celery 版本而有所不同。 还可以查看documentation
【讨论】: