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.
- crear tus tipos de notas (Notice Type)
- 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])