跳转到主要内容

Django网络框架的用户通知管理

项目描述

使用方法

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

  • 创建您的通知类型

  • 创建您的通知模板

  • 发送通知

创建通知类型

您需要调用一次 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})

项目详情


下载文件

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

源分发

geonode-notification-1.1.3.tar.gz (24.4 kB 查看哈希值)

上传时间