在 django 项目中的数据发生任何更新或更改时,有哪些方法可以自动向用户发送每周电子邮件通知?
问问题
761 次
2 回答
3
我将描述我所知道的最简单的解决方案。对于这个问题,还有很多更复杂的方法。
从根本上说,你需要三样东西:
- 任务运行器(我建议使用django-kronos配置 cron 作业)
- 一个 SMTP 提供程序(我推荐Mailgun,它使用 Django 设置起来非常简单,并且可以为您提供一些开箱即用的测试积分)。
- 电子邮件模板(自己编写并使用 Django 渲染为字符串——Mailgun 在他们的博客上也有一些很好的开源模板)
示例:django-kronos提供了将函数注册为 cron 作业的装饰器(假设您的 Web 服务器是基于 Linux 的)。这些作业可以作为部署过程的一部分从命令行安装:
./manage.py installtasks
要让 kronos 找到任务,它们必须位于cron.py
应用程序内的文件中。
# myapp/cron.py
import kronos
from django.contrib.auth.models import user
from myapp.services import check_for_changes, notify_user_of_change
# Register cron job to run once a week (every Sunday) at midnight
@kronos.register('0 0 * * 0')
def notify_about_changes():
"""Sets up a cron job and runs this service function once a day.
Installed With:
``./manage.py installtasks``
"""
all_my_users = User.objects.all()
for user in all_my_users:
changes = check_for_changes(user)
for change in changes:
notify_user_of_change(user, change)
请注意,让您的任务功能尽可能“精简”是一个很好的做法。在您的情况下,您正在 (a) 检查更改,然后 (b) 通知每个更改。这些都可以是一个接受用户实例作为参数的函数,也可以是模型方法。无论如何,辛苦的工作应该在别处处理。
于 2015-03-11T19:05:39.823 回答
0
这是一个非常广泛的问题,因此不幸的是,答案也将是广泛的。您正在寻找的一般工作流程可能从一个信号开始,您可以将其设置为在更新数据时激活。
然后,该信号将存储有关更改的数据,然后使用许多不同的电子邮件选项之一发送电子邮件。您可以使用内置的Django emails,也可以使用 3rd 方 API,例如django-mailchimp。
希望这能让你朝着正确的方向前进。
于 2015-03-11T17:55:45.720 回答