向夹层博客添加订阅模块的最简单方法
Easiest strat to add a Subscribe module to a Mezzanine blog
我有一个夹层博客,我想在每个页面上添加一个小表格,以便用户可以输入他们的电子邮件地址并单击 'subscribe' 因此,从那一刻起,将发送一封电子邮件来宣布任何新 post 到博客。
我没有看到用于该目的的内置模块或任何现有模块...我应该从头开始编程吗?有什么想法吗?
由于没有答案,我将尝试提供我对这种情况下最简单策略的最佳猜测。我不知道 Mezzanine 中有任何内置函数可以执行此特定功能,所以我将如何处理它:
python manage.py startapp subscriber
- 构建基本模型 -
email = models.EmailField(unique=True)
,等等
- 创建基础
admin.py
更新 settings.py
-> INSTALLED_APPS
和 ADMIN_MENU_ORDER
ADMIN_MENU_ORDER = (
(_("Web Content"), ((_("Pages"), "pages.Page"),
(_("Subscribers"), "subscriber.Subscriber"),
创建一个 forms.py
- 像这样:
class SubscriberForm(forms.ModelForm):
class Meta:
model = Subscriber
fields = ['email']
为上述形式的GET/POST设置一个views.py
- 重新配置
urls.py
以重定向到新视图功能
然后,也许我的回答中唯一有趣的部分是,我会将 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()
更新博客应用程序目录中的 app.py
以将其包含在配置 class:
下
def ready(self):
import blog.signals # noqa
如果您已将 Django 配置为通过外部 SMTP 邮件服务器发送邮件,那就更容易了。如果不是,您可能希望 setup Postfix with OpenDKIM and configure SPF 降低外发邮件最终变成垃圾邮件的可能性。
(此外,您显然需要处理管理员将草稿 post 更改为已发布的 post 等情况)
不确定这是否有帮助,但希望如此!
我有一个夹层博客,我想在每个页面上添加一个小表格,以便用户可以输入他们的电子邮件地址并单击 'subscribe' 因此,从那一刻起,将发送一封电子邮件来宣布任何新 post 到博客。
我没有看到用于该目的的内置模块或任何现有模块...我应该从头开始编程吗?有什么想法吗?
由于没有答案,我将尝试提供我对这种情况下最简单策略的最佳猜测。我不知道 Mezzanine 中有任何内置函数可以执行此特定功能,所以我将如何处理它:
python manage.py startapp subscriber
- 构建基本模型 -
email = models.EmailField(unique=True)
,等等 - 创建基础
admin.py
更新
settings.py
->INSTALLED_APPS
和ADMIN_MENU_ORDER
ADMIN_MENU_ORDER = ( (_("Web Content"), ((_("Pages"), "pages.Page"), (_("Subscribers"), "subscriber.Subscriber"),
创建一个
forms.py
- 像这样:class SubscriberForm(forms.ModelForm): class Meta: model = Subscriber fields = ['email']
为上述形式的GET/POST设置一个
views.py
- 重新配置
urls.py
以重定向到新视图功能 然后,也许我的回答中唯一有趣的部分是,我会将 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()
更新博客应用程序目录中的
下app.py
以将其包含在配置 class:def ready(self): import blog.signals # noqa
如果您已将 Django 配置为通过外部 SMTP 邮件服务器发送邮件,那就更容易了。如果不是,您可能希望 setup Postfix with OpenDKIM and configure SPF 降低外发邮件最终变成垃圾邮件的可能性。
(此外,您显然需要处理管理员将草稿 post 更改为已发布的 post 等情况)
不确定这是否有帮助,但希望如此!