【问题标题】:I want to schedule the email send for some choosen date . How can I do that in DRF?我想安排一些选定日期的电子邮件发送。我怎样才能在 DRF 中做到这一点?
【发布时间】:2021-08-24 13:22:33
【问题描述】:

我想将收件人电子邮件地址和计划日期作为输入并将邮件发送到计划日期。我在 views.py 中有以下代码行 实际上,我期待在 django 中使用 apscheduler 包来执行 异步后台任务,但 任何建议和解决方案都值得考虑

class SendMailView(APIView):

    def post(self, request, *args, **kwargs):

    '''
    POST Method for sending Email
    '''     
       send_to = request.data.get('receiver_email') 
       schedule_for = request.data.get('schedule_date')

       email_plaintext_message = " Hello"
       send_mail(
                # title:
                "Test mail,
                # message:
                email_plaintext_message,
                # from:
                 'some@gmail.com,
                # to:
                [send_to]

            )


       return Response({"status":"Email Send"},status=status.HTTP_200_OK)
        

【问题讨论】:

  • 我刚从 apscheduler 转到 celery...你会考虑吗?
  • 当然@Walucas 很想听听更多,请随意。请注意,我想在请求正文中获取收件人电子邮件地址。
  • 我会发布作为答案,但把细节留给你,给我一秒钟
  • @Walcuas 只是想知道您为什么从 apscheduler 转到 celery 的原因?
  • 我的情况是,同一进程被安排在多个实例上,我不希望这样......我有三个实例,所有这些实例都在触发我的任务,所以我需要可以管理此问题的外部事物

标签: django email django-rest-framework schedule apscheduler


【解决方案1】:

考虑使用Celery。 您需要做的就是完成安装,启动一个 worker 和 beat,然后您就可以调度任务了。

task.py

from celery import shared_task

@shared_task
def sendScheduledEmail(email_to):
   #do your stuff

然后在您的 API POST 中安排:

sendScheduledEmail.apply_async([email_to],eta=datetime.datetime(2021, 07, 06, 09, 30))

我没有测试这个,所以如果你有任何错误,请告诉我

【讨论】:

  • 肯定会测试它! ,顺便说一句,即使在邮件发送后,工作人员还会继续运行吗?
猜你喜欢
  • 2016-02-07
  • 2022-11-09
  • 2021-11-25
  • 2016-11-04
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
相关资源
最近更新 更多