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.html 和 full.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_now 或 queue 的代理。它们都有相同的签名
send(users, label, extra_context)
参数如下
users 是要发送通知的 User 对象的可迭代对象。
label 是您在之前步骤中用于标识通知类型的标签。
extra_content 是一个字典,用于向用于渲染通知的模板添加自定义上下文条目。这是可选的。
send_now 与 queue 与 send
首先,让我们分析每个的作用。
send_now
这是一个阻塞调用,将检查每个用户的通知资格并实际执行发送。
queue
这是一个非阻塞调用,将队列对 send_now 的调用,稍后执行。要稍后执行调用,您需要使用 emit_notices 管理命令。
send
send_now 和 queue 的代理。它从全局设置 NOTIFICATION_QUEUE_ALL 获取其行为。默认情况下,它是 False。此设置旨在帮助控制您是否要排队任何对 send 的调用。
send 函数还接受 now 和 queue 关键字参数。默认情况下,每个选项都设置为 False,以尊重全局设置,全局设置为 False。这允许您在每次调用时覆盖是否调用 send_now 或 queue。
可选通知支持
如果您想在可重用应用中使用 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ec94bc4352fbd552edf22247ca5f4594312e79089492d5ff2560524dae624b66 |
|
MD5 | c9cbcde8de4d3aa2e9853683433335a2 |
|
BLAKE2b-256 | 4396bc9322cde23827e8ccc211be3b821ee8df982cde8f8af905b707a93e1950 |