Django-Notification - 电子邮件后端的替代方案

时间:2011-09-12 14:08:17

标签: python django pinax django-notification

我正在使用Django构建一个项目,目前我正在尝试实现django-notification作为跟踪用户活动的方法。虽然我设法安装并创建了一些通知,但它们只通过电子邮件发送,但没有存储在相应的数据库中,因此我可以在Feed视图中显示它们。

/ notifications / feed /目前给我一个类型错误,我不确定这是否相关?

/ notifications / feed /的TypeError init ()只需要3个参数(给定1个)

任何建议都将受到赞赏。我看过Pinax如何使用通知,但无法弄清楚它们是如何超越仅限电子邮件的后端。

在settings.py中,我启用了'notification',以及template_context_processor'notification.context_processors.notification'。

urls.py

    url(r'^note/', include('notification.urls')),

应用程序/ management.py

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("messages_received", _("Message Received"), _("you have received a message"), default=2)

signals.post_syncdb.connect(create_notice_types, sender=notification)

应用程序/ view.py

...      
if notification:
    notification.send([user], "messages_received", {'message': message,})
...

notification.send已执行,我检查了这一点,但似乎没有任何内容存储在“通知”数据库中..

我应该补充一下,我正在运行django-notification(https://github.com/brosner/django-notification)的Brian Rosner分支。

1 个答案:

答案 0 :(得分:1)

看起来brosner的django通知分支与jtauber的不同之处在于send_now()实际上并没有将Notice实例添加到数据库,默认的EmailBackend通知后端也没有。

您必须编写自己的通知后端类,在调用deliver()时创建通知实例,并将其添加到NOTIIFICATION_BACKENDS

复制jtauber行为的(未经测试的)示例:

class MyBackend(BaseBackend):
    def deliver(self, recepient, sender, notice_type, extra_context):
        messages = self.get_formatted_messages(["notice.html"],
            notice_type.label, extra_context)
        notice = Notice.objects.create(recipient=recepient,  
            message=messages['notice.html'], notice_type=notice_type, 
            on_site=on_site, sender=sender)
        notice.save()