Skip to main content

django-delayed-notifications provides tracking of notifications, and delayed sending.

Project description

Notifications

This application sends notifications to the user and emails addresses. It stores messages into a database, and sends can be delayed through a cron task.

Installation

$ pip install django-delayed-notifications

Add django_notifications to your INSTALLED_APPS:

INSTALLED_APPS = (
    ...
    "django_notifications",
    ...
)

Apply the migrations:

$ ./manage.py migrate

Usage

Instead of sending a raw email, with the send_mail django function, you can create a Notification object and program the sending.

Notification creation

from pathlib import Path
from django_notifications.models import Notification, Attachment
from django.core.files import File
from django.utils.timezone import now
from datetime import timedelta

# **Basic creation**
my_instance = "<A random object in the application>"
notification = Notification.objects.create(
    subject="My beautiful email",
    text_body="My text body",
    html_body="""<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="x-apple-disable-message-reformatting">
    <title>My beautiful email</title>
</head>
<body>My HTML body</body>
</html>
    """,
    from_email="foo@example.org",  # Optional
    related_object=my_instance,  # Optional
)

# ** Related objects states management **
# When using FSM, you can provide the states from / to (Optional)
notification.state_from = "active"
notification.state_to = "processing"

# **Attachments management**
# Include file from a raw file
from django.core.files.base import ContentFile

_attachment = Attachment.objects.create(
    notification=notification,
    attachment_file=ContentFile(Path("<my_file>").open("r"), name="my_file.txt")
)

# Including an attachment from a FileField
from django.db.models.fields import FieldFile

assert isinstance(my_instance.file, FieldFile)

_attachment = Attachment.objects.create(
    notification=notification,
    attachment_file=ContentFile(my_instance.file.read(), name=my_instance.file.name)
)

# **Recipients management**
# You can provide users
notification.recipients.set("<User instance>", "<User instance>", ...)

# And / Or provides email address, `\n` separated
notification.email_recipients = "\n".join([
    "foo@example.org", "bar@example.org"
])
notification.save()

# You can set the delayed sending date
notification.delayed_sending_at = now() + timedelta(days=1)
notification.save()

# Or you can send the email immediately
notification.send()

Management command

The application provides a management command to send the emails:

This command can be used in a cron, to provide delayed sending.

$ ./manage.py send_notifications
12 notifications sent.

Templates

The application provides some basic templates for emails, and provides some basic blocks.

Provided blocks

{% extends "django_notifications/base_email.html" %
{% block extrahead %}<!-- JS / CSS to add to header -->{% endblock extrahead %}
{% block header %}<!-- Email header (empty) -->{% endblock header %}
{% block page_title %}
  {% block title-content %}{{ subject }}{% endblock title-content %}
{% endblock page_title %}
{% block main-content %}<!-- Main content on the email -->{% endblock main-content %}
{% block buttons %}
    <div class="buttons">
      {% block buttons-content %}<!-- Link buttons -->{% endblock buttons-content %}
    </div>
{% endblock buttons %}
{% block signature %}
    <div class="signature">
      {% block signature-content %}<!-- Email signature content -->{% endblock signature-content %}
    </div>
{% endblock signature %}

Config

This application provides an admin interface for notifications.

  • delay_notifications: Delay notification sending, using the cron job
  • delay: Delay to apply to notifications
  • receive_notifications_field: Name of the field to allow notification send
  • receive_messages_field: Name of the field to allow notification send -- NOT USED
  • enable_debug_notifications: Enable (re)sending emails
  • debug_notifications_email: Target recipient of the email debugging

Notes

The application is available in English and translated to French.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_delayed_notifications-0.12.1.tar.gz (5.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_delayed_notifications-0.12.1-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

Details for the file django_delayed_notifications-0.12.1.tar.gz.

File metadata

File hashes

Hashes for django_delayed_notifications-0.12.1.tar.gz
Algorithm Hash digest
SHA256 3fde72c3b8414a2cdef875ebfd5c142afeb07bf7c434218660c020de578024e8
MD5 d5293ac4f126d3cdceadef470c9f114b
BLAKE2b-256 2599a4dcdbb65b729c4181d2bc5fc95bae3912e6e91503586750318a2838a7f9

See more details on using hashes here.

File details

Details for the file django_delayed_notifications-0.12.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_delayed_notifications-0.12.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d2df44ca9a089f4340f21fe6f2bea950271690e1b4e03f1654c5553f3165e95d
MD5 5b68ce1bb8e99db49e9b94f2c7da8b6c
BLAKE2b-256 d95119c75272708adb57748456e89f5cbcea7b66d632e42566b54c1b5dab9a09

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page