我有一个Mezzanine博客,我想在每个页面添加一个小表格,以便用户可以输入他们的电子邮件地址并点击“订阅”,这样,从那一刻起,将发送一封电子邮件,宣布任何新帖子到博客。
我没有看到为此目的内置或任何现有模块......我应该从头开始编程吗?有什么想法吗?
答案 0 :(得分:0)
由于没有答案,我将尽力提供最佳策略,以了解这种情况下最简单的策略。我不知道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
以在Config类下包含此内容:
def ready(self):
import blog.signals # noqa
如果您已将Django配置为通过外部SMTP邮件服务器发送邮件,则更容易。如果没有,您可能希望setup Postfix使用OpenDKIM并配置SPF以减少外发邮件最终成为垃圾邮件的可能性。
(另外,您显然需要处理管理员将草稿更改为已发布帖子的情况等)。
不确定这是否有帮助,但希望如此!