1

在 django 项目中的数据发生任何更新或更改时,有哪些方法可以自动向用户发送每周电子邮件通知?

4

2 回答 2

3

我将描述我所知道的最简单的解决方案。对于这个问题,还有很多更复杂的方法。

从根本上说,你需要三样东西:

  1. 任务运行器(我建议使用django-kronos配置 cron 作业)
  2. 一个 SMTP 提供程序(我推荐Mailgun,它使用 Django 设置起来非常简单,并且可以为您提供一些开箱即用的测试积分)。
  3. 电子邮件模板(自己编写并使用 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 回答