一个模型不可知的django通讯应用集成马赛克。

nuntius的Python项目详细描述


努提乌斯

Nuntius是Django的新闻稿应用程序。

Nuntius与您的Django项目集成。 它对您的订户和订户列表模型非常不可知。

它具有一个拖放式电子邮件功能。 编辑,为您的订户发送漂亮的电子邮件。

工作原理

努提乌斯对你的订户模式是不可知论的。你可以用你的电流 使用模型,只要它实现了一些必需的方法。

要允许最终用户选择收件人,您可以选择实现 一个或多个"段"模型。段模型实现所需的方法 获取用户查询集

然后,您可以在django管理面板中创建活动,并将它们发送到 现有部分。

芹菜是用来排队和发邮件的。努提乌斯必须有自己的芹菜工人。

安装

  1. 将"nuntius"添加到已安装的应用程序设置中,如下所示:

    INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',...'nuntius',]
  2. 在项目中包含nuntius urlconfurls.py如下:

    path('nuntius/',include('nuntius.urls')),
  3. 定义您的订户模型,使其与Nuntius一起工作。 你必须继承 nuntius.models.abstractSubscriber 并实施所有必要的方法。一个简单的方法是直接使用或扩展 basesubscriber,但是 您可以按自己的方式实现abstractsubscriber的方法。

    以下是您必须实现的方法:

    • 获取用户状态() 必须返回AbstractSubscriber.status_选项之一。你也可以简单地 定义一个"订户状态"属性。

    • 获取用户电子邮件() 必须返回订户的唯一电子邮件地址。你也可以简单地 定义电子邮件属性。

    • 获取订户数据() 必须返回可在中用作替换的值的措辞 电子邮件。默认为{"email":self.get_subscriber_email()}

  4. settings.py中设置两个必需的设置

    NUNTIUS_SUBSCRIBER_MODEL='myapp.MySubscriberModel'NUNTIUS_CELERY_BROKER_URL='redis://'
  5. 在后台启动redis和芹菜。在生产中,您可能应该使用systemd来实现这一点。 芹菜的命令一定是这样的 (需要应用程序名、队列和节点名选项):

    exportDJANGO_SETTINGS_MODULE=myapp.settingscelery-Anuntius.celeryworker-Qnuntius-nnuntius@%h

    如果你的项目中有自己的芹菜应用程序,使用同一个代理,请小心。 你应该有两个独立的工人负责你的任务和努提乌斯的任务, 因为nuntius worker需要特殊配置才能允许nuntius报告 正确发送IG状态。

    项目任务的工作人员必须明确 仅从默认队列或您定义的任何其他队列获取任务。 它还必须具有与专用于nuntius的worker不同的节点名。

    celery-Amyapp.celeryworker-Qcelery
  6. 除非您使用自定义管理站点,否则nuntius的管理面板将是 自动发现 并添加到您的管理网站。如果使用自定义管理网站,则需要注册 Nuntius型号,类似于:

    admin_site.register(nuntius.models.Campaign,nuntius.admin.CampaignAdmin)admin_site.register(nuntius.models.CampaignSentEvent,nuntius.admin.CampaignSentEventAdmin)
  7. < > >

    高级用法

    列出段

    如果要对收件人有更多控制,可以创建 细分模型。

    段的一个例子是一个简单的模型,它包含一个多对多的关系 致订户。

    另一个例子是段模型,它根据 他们上次登录的日期:

    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)
    • get_subscribers_queryset允许返回订阅者,不管订阅者 订户状态,如获取订户状态
    • 获取用户数只是为了方便在管理面板中使用,而不是 必须准确。如果你想准确,你应该 将您的订户状态记入帐户。

    然后,将您的段模型添加到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 1-2-3中的步骤 安装任何邮件。如果您想为nuntius配置任何邮件并保留 对于其他用途的默认电子邮件后端,您可以使用设置nuntius_email_backend 而不是默认的电子邮件后端

    此外,使用anymail配置nuntius将允许您使用esp跟踪功能 以及在电子邮件发送后跟踪其状态。

    网络挂钩

    配置webhhoks允许nuntius跟踪电子邮件状态并 提供有关活动的统计信息,以及更新订阅服务器状态 当它们反弹时。

    1. 配置电子邮件跟踪,如中所述 任何邮件文档
    2. 在您的订户上实现设置订户状态(self、email、status)的方法 模特经理。
    3. < > >

      Nuntius将自动监听任何邮件信号并适当调用此方法。

      许可证

      版权归Guillaume Royer和Arthur Cheysson所有。

      您可以在GPLv3条款下使用Nuntius。

      欢迎加入QQ群-->: 979659372 Python中文网_新手群

      推荐PyPI第三方库


热门话题
java我想访问同一类的不同函数中的函数变量   创建字段/值哈希映射的java反射   java Velocity工具向后兼容性?   cmd JAVA运行时错误:发生JNI错误   java spring引导示例hateoas不工作   java为什么Android Studio和gradle可以使用不同的类路径进行单元测试?   java Selenium Firefox驱动程序初始化   java如何在jar中重新定位gradle依赖项的包   java为什么我的单线程hello world应用程序使用22个OS线程?   正则表达式替换Java字符串中的特殊字符   在任何派生类的构造函数之后运行方法的java   java从输入字符串中找出日期   带有libGdx(Java)音乐的安卓studio可以在Android模拟器上工作,但不能在桌面上工作   java我在getconnection的参数方面有错误吗?   java使用JFileChooser访问选定文件   java如何将Json解析为另一个活动   java使用Resources for html和rest server   java更新列表,列表内容来自循环中的方法   java如何在GLSL中读取完整范围的32位整数纹理