芹菜建议只发送电子邮件吗



我有一个带有django-rest框架的api。

该api用于用户注册。注册后,api会向用户发送验证电子邮件,但发送电子邮件需要一点时间,因此我想在后台发送电子邮件。

对于这个要求,应该采取什么方法?

这应该是您实现想要执行的任务的方法。

  1. 安装芹菜
  2. 在您的项目文件夹中创建一个celery.py文件,settings.py文件位于该文件夹中(推荐但不是必需的(并将以下代码粘贴到您的文件中。将示例替换为项目名称
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)
  1. 在设置中添加以下行:
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变量分配值。

  1. 打开项目目录的init.py文件并粘贴此代码
from .celery import app as celery_app
__all__ = ['celery_app']
  1. 在应用程序目录中创建一个task.py文件,并编写一个发送电子邮件的函数例如:
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])
  1. 使用启动芹菜服务器
celery -A project worker --loglevel=info 
  1. 将视图中的this_function作为普通函数调用,并传递所需的参数
from .task import send_celery_email
send_celery_email.delay(recipient_list = [])

注意:这只是工作流程的路线图,实际代码可能会根据您的需求和芹菜版本而有所不同。同时检查文档

相关内容

  • 没有找到相关文章

最新更新