Usando django-notification

Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.

django-notification es una aplicación para Django que permite al resto de las aplicaciones de un proyecto enviar notas a los usuarios. Así, cuando la aplicación Stock detecta que el número de bulones que hay en el depósito es menor límite de reposición puede enviar una nota de tipo "Avisos prioritarios" al usuario responsable del depósito. Esta nota puede ser recibida por mail, feed o mostrarse en el sistema cuando el usuario inicia su sesión.

El siguiente es un artículo del proyecto que hemos traducido yo y Cecilia.

Integrar Notification

Integrar notification a tu aplicación es un proceso simple de dos pasos.

  1. crear tus tipos de notas (Notice Type)
  2. enviar notificaciones

Crear tipos de notas (Notice Type)

Debes ejecutar create_notice_type(label, display, description) una vez para crear los tipos de notas para tu aplicación en la base de datos. label es un nombre interno, corto, que será usado para el tipo, display es lo que el usuario verá como el nombre del tipo de nota y description es una descripción corta.

Por ejemplo:


from django.dispatch import dispatcher

from django.db.models import signals



try:

    from notification import models as notification



    def create_notice_types(app, created_models, verbosity, **kwargs):

        notification.create_notice_type("invitacion_amigo", u"Invitación recibida",

                                                     u"has recibido una invitación")

        notification.create_notice_type("invitacion_aceptada", u"Invitación aceptada",

                                                     u"una invitación que enviaste fue aceptada")



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

except ImportError:

    print "No se encontró la aplicación notification, no se crearán objetos del tipo NoticeTypes"

Notar que el código está envuelto con un try para que si django-notification no está instalado, tu aplicación funcione de todas formas.

Enviar notificaciones

Para enviar mensajes se usa send(users, notice_type_label, message_template, object_list, issue_notice) dónde object_list y issue_notice son opcionales.

users es una lista de usuarios que deben recibir la nota. notice_type_label es la etiqueta que usaste en el paso previo para identificar un tipo de nota. message_template es solo un string, aunque si object_list no está vacía, entonces message_template debe contener tantos %s como objetos en object_list. Entonces serán reemplazados con referencias a los correspondientes objetos de object_list.

Por ejemplo:


notification.send([to_user], "invitacion_amigo", "%s solicita ser tu amigo.", [from_user])

enviará una nota de tipo invitacion_amigo a to_user con el mensaje XXX solicita ser tu amigo. dónde XXX es una referencia al objeto from_user. Dependiendo del medio de notificación, esta referencia será un link o solo texto plano.

issue_notice es True por defecto pero se puede cambiar a False si querés que una notificación se envíe pero no se persista como un objeto de tipo Notice en la base de datos.

Para permitir que tu aplicación funcione sin notification, podés envolver el import en un try y testear si el módulo fue cargado antes de enviar la nota.

Por ejemplo:


try:

    from notification import models as notification

except ImportError:

    notification = None

y luego:


if notification:

    notification.send([to_user], "invitacion_amigo", "%s solicita ser tu amigo.", [from_user])

Comentarios

Comments powered by Disqus