跳转到主要内容

Django Web框架的用户通知管理

项目描述

使用方法

将通知支持集成到您的应用程序是一个简单的三步过程。

  • 创建您的通知类型

  • 创建您的通知模板

  • 发送通知

创建通知类型

您需要调用一次 create_notice_type(label, display, description) 来在数据库中创建您的应用程序的通知类型。 label 仅是用于类型的内部短名称,display 是用户将看到的通知类型名称,description 是简短描述。

例如

notification.create_notice_type("friends_invite", "Invitation Received", "you have received an invitation")

自动执行此通知类型创建的一个好方法是在您的应用的 management.py 文件中,将其附加到 syncdb 信号。以下是一个示例

from django.conf import settings
from django.db.models import signals
from django.utils.translation import ugettext_noop as _

if "notification" in settings.INSTALLED_APPS:
    from notification import models as notification

    def create_notice_types(app, created_models, verbosity, **kwargs):
        notification.create_notice_type("friends_invite", _("Invitation Received"), _("you have received an invitation"))
        notification.create_notice_type("friends_accept", _("Acceptance Received"), _("an invitation you sent has been accepted"))

    signals.post_syncdb.connect(create_notice_types, sender=notification)
else:
    print "Skipping creation of NoticeTypes as notification app not found"

请注意,代码被包裹在条件语句中,因此如果 django-notification 未安装,您的应用程序仍然会继续。

请注意,display 和 description 参数已通过使用 ugettext_noop 标记为翻译。这将使您能够使用 Django 的 makemessages 管理命令并使用 django-notification 的 i18n 功能。

通知模板

可以编写四个不同的模板来通知的实际内容

  • short.txt 是通知的一个非常短的纯文本版本(适用于像电子邮件主题这样的东西)

  • full.txt 是通知的一个较长的纯文本版本(适用于像电子邮件正文这样的东西)

  • notice.html 是通知的一个简短的HTML版本,在网站上显示在用户的公告列表中

  • full.html 是通知的一个长HTML版本(目前未用于任何事情)

每个都应该放在模板路径上的一个名为 notification/<notice_type_label>/<template_name> 的目录中。如果这些文件中任何一个缺失,将会使用默认值。在实践中,至少应提供 notice.htmlfull.txt

例如,notification/friends_invite/notice.html 可能包含

{% load i18n %}{% url invitations as invitation_page %}{% url profile_detail username=invitation.from_user.username as user_url %}
{% blocktrans with invitation.from_user as invitation_from_user %}<a href="{{ user_url }}">{{ invitation_from_user }}</a> has requested to add you as a friend (see <a href="{{ invitation_page }}">invitations</a>){% endblocktrans %}

以及 notification/friends/full.txt 可能包含

{% load i18n %}{% url invitations as invitation_page %}{% blocktrans with invitation.from_user as invitation_from_user %}{{ invitation_from_user }} has requested to add you as a friend. You can accept their invitation at:

http://{{ current_site }}{{ invitation_page }}
{% endblocktrans %}

上下文变量在发送通知时提供。

发送通知

发送通知有两种不同的方式。我们支持发送通知的阻塞和非阻塞方法。发送通知最简单的方式,例如

notification.send([to_user], "friends_invite", {"from_user": from_user})

需要注意的是,send 是围绕 send_nowqueue 的一个代理。它们都有相同的签名

send(users, label, extra_context)

参数如下

  • users 是一个要发送通知的 User 对象的可迭代序列。

  • label 是你在上一步中使用的标签,用于识别通知类型。

  • extra_content 是一个字典,用于向渲染通知的模板中添加自定义上下文条目。这是可选的。

send_nowqueuesend

让我们首先分解每个的作用。

send_now

这是一个阻塞调用,它将检查每个用户的资格,并实际执行发送。

queue

这是一个非阻塞调用,它将调用 send_now 并将其排队,以便稍后执行。要稍后执行调用,您需要使用 emit_notices 管理命令。

send

这是 send_nowqueue 的代理。它的行为来自一个名为 NOTIFICATION_QUEUE_ALL 的全局设置。默认情况下,它为 False。此设置旨在帮助控制您是否希望排队任何对 send 的调用。

send 还接受 nowqueue 关键字参数。默认情况下,每个选项都设置为 False,以尊重全局设置,该设置为 False。这允许您在每个调用的基础上覆盖是否应调用 send_nowqueue

可选通知支持

如果您想在可重用应用中使用 django-notification,您可以在发送通知之前将 django-notification 的导入包裹在一个条件语句中,该语句测试它是否已安装。因此,即使您的应用或项目没有通知功能,也能正常工作。

例如

from django.conf import settings

if "notification" in settings.INSTALLED_APPS:
    from notification import models as notification
else:
    notification = None

然后,稍后

if notification:
    notification.send([to_user], "friends_invite", {"from_user": from_user})

项目详情


下载文件

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

源分发

django-anonymous-notification-1.2.1.tar.gz (27.6 kB 查看哈希值)

上传时间

由以下组织支持