跳转到主要内容

为Django框架编写的可插拔通知系统。

项目描述

Documentation Status https://badge.fury.io/py/django-nyt.svg https://codecov.io/github/django-wiki/django-nyt/coverage.svg?branch=main

概念

django-nyt是Django的通知框架。它是这样做的

from django_nyt.utils import notify

EVENT_KEY = "my_key"
notify(_("OMG! Something happened"), EVENT_KEY)

所有订阅"my_key"的用户在调用notify()时都会创建一个通知。通知的处理方式取决于用户的设置。

如果您已启用电子邮件,则订阅者会立即或在他们选择的间隔内收到通知摘要。

数据可以从Django模型或包含的JSON视图轻松访问。

通过使用通用对象关系、自定义URL和自定义电子邮件模板,您可以扩展通知逻辑,创建在点击链接时标记通知为已读并同时在同一时间将用户重定向到最终目的地的电子邮件消息。

from django_nyt.utils import notify

product = product
EVENT_KEY = "product_is_in_stock"
notify(
    _(f"{product.name} is in stock"),
    EVENT_KEY,
    url=f"/products/{product.id}/",
    target_object=product
)

路线图

如果人们开始使用并根据自己的用例完善它,这个项目就很有意义。

以下是一些未涵盖但非常欢迎的方面

  • 支持异步

  • 支持通过django-channels 4+进行通知

  • 支持HTML电子邮件(以及用户设置)

文档

https://django-nyt.readthedocs.io/zh/latest/

为什么你应该这么做呢?

用户需要一个经过巧妙筛选的事件流,它高度可定制。通过使用django-nyt,您的用户可以订阅全局事件或特定对象的相关特定事件。

与其发明自己的通知系统,不如使用这个系统,您不必设计自己的模型,并且将有一个很好的指南,帮助您在项目中实现通知的各个步骤。

让我们尝试总结一下您想要使用django-nyt的原因

  • 简单的API:在您想要的位置调用notify()

  • 用于发送电子邮件的CLI(作为cron作业、守护进程或Celery任务)

  • 支持django-channels和Web Sockets(可选,基于JSON轮询的回退)

  • 基本的JavaScript/HTML示例代码

  • 多语言

  • 为每种事件类型提供单独的订阅设置,例如:- 事件类型A会触发即时电子邮件通知,但事件B仅每周通过电子邮件发送。

  • 用户可以接收通知的可定制间隔

  • 每个通知的每个操作目标都可以有可选的URL

  • 避免杂乱:通知不会重复,而是增加计数器。

本项目旨在与django.contrib.messages相结合,提供简单、最佳实践、可扩展的通知解决方案。有大量其他Django通知应用程序,一些专注于特定通信协议的集成

你需要做什么?

django-nyt尽可能满足尽可能多的需求,并设置合理的默认值。

但是,你需要做很多事情!首先,你需要编写一些JavaScript代码来获取最新的通知并在屏幕的某个区域显示它们。点击该图标后,将显示最新的通知,点击单个通知将通过标记通知为已读的页面将用户重定向。

类似于这样

Javascript drop-down

JavaScript下拉菜单:文档中提供了一些示例,但没有简单的方法可以将这个巧妙的小东西放在您网站的顶部,您需要自己解决这个问题。

您的待办事项列表中的其他项目

  • 为用户提供自定义订阅和通知首选项的选项。创建一个继承自django_nyt.forms.SettingsForm的自己的Form

  • 通过覆盖django_nyt/emails/notification_email_message.txtdjango_nyt/emails/notification_email_subject.txt中的模板来自定义通知电子邮件的内容。

  • 您还可以为每个通知密钥使用单独的电子邮件模板。这包括使用glob模式。例如,您可以在设置中添加以下内容

    NYT_EMAIL_TEMPLATE_NAMES = OrderedDict({
       "ADMIN_*": "myapp/notifications/email/admins.txt"
       "*": "myapp/notifications/email/default.txt"
    })
    NYT_EMAIL_TEMPLATE_SUBJECT_NAMES = OrderedDict({
       "ADMIN_*": "myapp/notifications/email/admins_subject.txt"
       "*": "myapp/notifications/email/default_subject.txt"
    })
  • 使邮件通知守护进程脚本持续运行python manage.py notifymail --daemon,或者通过调用python manage.py notifymail --cron作为cron作业以某些间隔运行。您还可以通过Celery任务或类似的方式调用它,例如call_command('notifymail', cron=True)

开发/演示项目

在您的Git分支中,运行 pip install -r requirements.txt 以安装需求。

安装pre-commit钩子以验证您的提交

pip install pre-commit
pre-commit install

文件夹 test-project/ 包含一个预配置的django项目和SQLite数据库。Django管理员的登录名是 admin:admin

cd test-project
python manage.py runserver

之后,转到 http://localhost:8000

社区

由于许多django-wiki用户也熟悉Django,请访问Libera上的#django-wiki频道。点击此处访问Web客户端 <https://web.libera.chat/?channel=#django-wiki>`__).

否则,请使用GitHub上的 讨论 标签。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django_nyt-1.4.1.tar.gz (29.0 kB 查看哈希值)

上传时间

构建分布

django_nyt-1.4.1-py3-none-any.whl (41.1 kB 查看哈希值)

上传时间 Python 3

由以下机构支持