1

我希望通过异步发送邮件来加快我网站的加载时间。目前,我的代码如下所示:

def myFunction(content):
   result = modify(content)
   send_mail('My Subject', result, 'me@example.com')
   return render(request, 'page.html', result)

使用Django-Mailer,我发现我可以通过将电子邮件写入数据库而不是立即发送来缩短加载时间,然后让 cron + Django mailer 异步处理我数据库中的电子邮件。

但是,我希望我的数据库尽可能远离潜在的敏感信息,并且希望避免将通过我的应用程序发送的任何电子邮件写入我的数据库。即使数据只是在短时间内写入,通过自动备份也有可能保存一些东西。

我知道这里是否没有解决方案,但是有没有办法异步发送电子邮件而无需每次都将它们写入数据库?我真的不认为这是可能的,但我理想的希望是如果有办法返回响应,然后发送电子邮件。

def myFunction(content):
   result = modify(content)
   return render(request, 'page.html', result)
   send_mail('My Subject', result, 'me@example.com')

Django-After-Response似乎可以做到这一点,但自 2015 年以来一直没有更新。

这个答案这个答案也提供了潜在的解决方案。

4

1 回答 1

1

您在这里有几个选择。一种方法是拥有一个任务队列和一个执行这些任务的工作人员。

我喜欢使用 Django-RQ https://github.com/rq/django-rq,但 Celery 是另一个不错的选择。尽管有了这个,你需要运行一个工作实例,并且还需要一些东西来存储队列,比如 Redis。

对于更简单快捷的解决方案,我建议尝试 django-background-tasks: https ://django-background-tasks.readthedocs.io/en/latest/# 这个将任务队列存储在数据库中,但它会处理它所以你不必自己实现它。

于 2020-02-06T17:26:29.980 回答