向夹层博客添加订阅模块的最简单方法

Easiest strat to add a Subscribe module to a Mezzanine blog

我有一个夹层博客,我想在每个页面上添加一个小表格,以便用户可以输入他们的电子邮件地址并单击 'subscribe' 因此,从那一刻起,将发送一封电子邮件来宣布任何新 post 到博客。

我没有看到用于该目的的内置模块或任何现有模块...我应该从头开始编程吗?有什么想法吗?

由于没有答案,我将尝试提供我对这种情况下最简单策略的最佳猜测。我不知道 Mezzanine 中有任何内置函数可以执行此特定功能,所以我将如何处理它:

  1. python manage.py startapp subscriber
  2. 构建基本模型 - email = models.EmailField(unique=True),等等
  3. 创建基础admin.py
  4. 更新 settings.py -> INSTALLED_APPSADMIN_MENU_ORDER

    ADMIN_MENU_ORDER = (
        (_("Web Content"), ((_("Pages"), "pages.Page"),
            (_("Subscribers"), "subscriber.Subscriber"),
    
  5. 创建一个 forms.py - 像这样:

    class SubscriberForm(forms.ModelForm):
        class Meta:
            model = Subscriber
            fields = ['email']
    
  6. 为上述形式的GET/POST设置一个views.py

  7. 重新配置 urls.py 以重定向到新视图功能
  8. 然后,也许我的回答中唯一有趣的部分是,我会将 Mezzanine Blog 应用程序目录复制到项目目录中,并创建一个 signals.py。也许添加这样的东西:

    @receiver(pre_save, sender=BlogPost, dispatch_uid="save_blogpost")
    def save_blogpost(sender, instance, **kwargs):
        """ Every time a new blog post is created, notify all subscribers."""
        if instance.published:
            subs = Subscriber.objects.all()
            for sub in subs:
                email = EmailMultiAlternatives(
                    subject="New Blog Post!",
                    body="A new blog post has been added!",
                    from_email="example@email.com",
                    to=[sub.email]
                )
                email.attach_alternative(self.body, "text/html")
                email.send()
    
  9. 更新博客应用程序目录中的 app.py 以将其包含在配置 class:

    def ready(self):
        import blog.signals  # noqa
    

如果您已将 Django 配置为通过外部 SMTP 邮件服务器发送邮件,那就更容易了。如果不是,您可能希望 setup Postfix with OpenDKIM and configure SPF 降低外发邮件最终变成垃圾邮件的可能性。

(此外,您显然需要处理管理员将草稿 post 更改为已发布的 post 等情况)

不确定这是否有帮助,但希望如此!