一个模型不可知的django通讯应用集成马赛克。
nuntius的Python项目详细描述
努提乌斯
Nuntius是Django的新闻稿应用程序。
Nuntius与您的Django项目集成。 它对您的订户和订户列表模型非常不可知。
它具有一个拖放式电子邮件功能。 编辑,为您的订户发送漂亮的电子邮件。
工作原理
努提乌斯对你的订户模式是不可知论的。你可以用你的电流 使用模型,只要它实现了一些必需的方法。
要允许最终用户选择收件人,您可以选择实现
一个或多个"段"模型。段模型实现所需的方法
获取用户查询集
然后,您可以在django管理面板中创建活动,并将它们发送到 现有部分。
芹菜是用来排队和发邮件的。努提乌斯必须有自己的芹菜工人。
安装
将"nuntius"添加到已安装的应用程序设置中,如下所示:
INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',...'nuntius',]
在项目中包含nuntius urlconf
urls.py
如下:path('nuntius/',include('nuntius.urls')),
定义您的订户模型,使其与Nuntius一起工作。 你必须继承
nuntius.models.abstractSubscriber
并实施所有必要的方法。一个简单的方法是直接使用或扩展basesubscriber
,但是 您可以按自己的方式实现abstractsubscriber
的方法。以下是您必须实现的方法:
获取用户状态()
必须返回AbstractSubscriber.status_选项之一。你也可以简单地 定义一个"订户状态"属性。获取用户电子邮件()
必须返回订户的唯一电子邮件地址。你也可以简单地 定义电子邮件
属性。
获取订户数据()
必须返回可在中用作替换的值的措辞 电子邮件。默认为{"email":self.get_subscriber_email()}
在
settings.py中设置两个必需的设置
NUNTIUS_SUBSCRIBER_MODEL='myapp.MySubscriberModel'NUNTIUS_CELERY_BROKER_URL='redis://'
在后台启动redis和芹菜。在生产中,您可能应该使用systemd来实现这一点。 芹菜的命令一定是这样的 (需要应用程序名、队列和节点名选项):
exportDJANGO_SETTINGS_MODULE=myapp.settingscelery-Anuntius.celeryworker-Qnuntius-nnuntius@%h
如果你的项目中有自己的芹菜应用程序,使用同一个代理,请小心。 你应该有两个独立的工人负责你的任务和努提乌斯的任务, 因为nuntius worker需要特殊配置才能允许nuntius报告 正确发送IG状态。
项目任务的工作人员必须明确 仅从默认队列或您定义的任何其他队列获取任务。 它还必须具有与专用于nuntius的worker不同的节点名。
celery-Amyapp.celeryworker-Qcelery
除非您使用自定义管理站点,否则nuntius的管理面板将是 自动发现 并添加到您的管理网站。如果使用自定义管理网站,则需要注册 Nuntius型号,类似于:
admin_site.register(nuntius.models.Campaign,nuntius.admin.CampaignAdmin)admin_site.register(nuntius.models.CampaignSentEvent,nuntius.admin.CampaignSentEventAdmin)
< > >get_subscribers_queryset
允许返回订阅者,不管订阅者订户状态
,如获取订户状态将在每个实例上调用代码>。
获取用户数
只是为了方便在管理面板中使用,而不是 必须准确。如果你想准确,你应该 将您的订户状态记入帐户。
高级用法
列出段
如果要对收件人有更多控制,可以创建 细分模型。
段的一个例子是一个简单的模型,它包含一个多对多的关系 致订户。
另一个例子是段模型,它根据 他们上次登录的日期:
fromdjango.dbimportmodelsfromdjango.db.modelsimportfieldsfromdatetimeimportdatetimefromnuntius.modelsimportBaseSegmentclassLastLoginDateSegment(BaseSegment,models.Model):last_login_duration=fields.DurationField()defget_display_name(self):returnf'Last login : {str(datetime.now() - self.last_login_duration)}'defget_subscribers_queryset(self):returnMySubscriberClass.objects.filter(last_login__gt=datetime.now()-self.last_login_duration)defget_subscribers_count(self):returnMySubscriberClass.objects.filter(last_login__gt=datetime.now()-self.last_login_duration,subscribed=True)
然后,将您的段模型添加到nuntius设置:
NUNTIUS_SEGMENT_MODELS=['myapp.lastlogindatesegment']
自定义模板
你可以写自己的马赛克模板,以满足你的需要。为了让它在管理员中可用,
在nuntius_mosaico_templates
中列出模板的公共url路径。可以提供模板
通过django静态文件系统,或您喜欢的任何其他方式。
NUNTIUS_MOSAICO_TEMPLATES=[("/static/mosaico_templates/versafix-2/template-versafix-2.html","Custom template")]
ESP和网络挂钩
维护自己的smtp服务器以发送新闻稿可能是 如果你有几个以上的订户,这是个坏主意。你可以使用 任何邮件以及Nuntius 以便使用电子邮件服务提供商。anymail支持 很多ESP,比如Amazon SES、Mailgun、Mailjet、邮戳、SendGrid, 发送Blue或SparkPost。
此外,使用anymail配置nuntius将允许您使用esp跟踪功能 以及在电子邮件发送后跟踪其状态。
网络挂钩
配置webhhoks允许nuntius跟踪电子邮件状态并 提供有关活动的统计信息,以及更新订阅服务器状态 当它们反弹时。