Джанго-Уведомление - Альтернатива Email Backend - PullRequest
2 голосов
/ 12 сентября 2011

Я создаю проект с Django и в настоящее время пытаюсь внедрить django-уведомление как средство для отслеживания активности пользователей.Хотя мне удалось установить его и создать некоторые уведомления, они отправляются только по электронной почте, но не сохраняются в соответствующих базах данных, чтобы я мог отображать их в представлении ленты.

/ notifications / feed / в настоящее время дает мнеошибка типа, я не уверен, что это связано?

TypeError в / notifications / feed / init () принимает ровно 3 аргумента (1 дано)

Любой совет будет любезно оценен.Я смотрел на то, как Pinax использует уведомления, но не мог понять, как они вышли за рамки только для электронной почты.

В settings.py у меня включено "уведомление", а также уведомление template_context_processor ".context_processors.notification '.

urls.py

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

app / 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)

app / view.py

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

messages.send выполнено, я проверил это, но похоже, что ничего не хранится в базе данных «уведомлений».

Я должен добавить, что я запускаю ветвь Брайана Рознера django -tification (https://github.com/brosner/django-notification).

1 Ответ

1 голос
/ 12 сентября 2011

Похоже, что форс django-уведомлений brosner отличается от jtauber тем, что send_now() на самом деле не добавляет экземпляры Notice в базу данных, равно как и не используется EmailBackend бэкэнд уведомлений по умолчанию.

Вам придетсянапишите свой собственный базовый класс уведомлений, который создает экземпляр Notice при вызове 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()
...