每周向用户发送有关数据更改的电子邮件通知

Send Weekly Email Notifications to Users regarding any changes in data

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

这是一个非常宽泛的问题,因此不幸的是答案也会很宽泛。您正在寻找的一般工作流程可能以 Signal 开始,您可以将其设置为在数据更新时激活。

然后该信号将存储有关更改的数据,然后使用许多不同的电子邮件选项之一发送电子邮件。您可以使用内置的 Django emails, or use a 3rd party API such as django-mailchimp.

希望这能让你朝着正确的方向前进。

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

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

  1. 任务运行器(我建议使用 django-kronos 配置 cron 作业)
  2. 一个 SMTP 提供商(我推荐 Mailgun,它是 super simple to set up with 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)

请注意,最好让您的任务功能尽可能保持 "thin"。在您的情况下,您 (a) 检查更改,然后 (b) 通知每个更改。这些都可以是接受用户实例作为参数的函数,或者它们可以是模型方法。无论如何,辛苦的工作应该在别处处理。