Django app for sending notifications.
Project description
django-ilmoitin
A templated Django messaging library
Installation
-
pip install django-ilmoitin
-
Add
django_ilmoitin
toINSTALLED_APPS
. -
Run migrations
python manage.py migrate ilmoitin
Usage
-
django-ilmoitin
usesdjango-mailer
to send emails, so you need to configure theMAILER_EMAIL_BACKEND
setting to letdjango-mailer
know, how to actually send the mail:MAILER_EMAIL_BACKEND = "your.actual.EmailBackend"
-
Define default from address in settings
DEFAULT_FROM_EMAIL = "Ilmoitin <ilmoitin@example.com>"
In case you need translated from addresses, those can be defined like
ILMOITIN_TRANSLATED_FROM_EMAIL: { "fi": "Yrjö <ilmoitin@example.com>", "en": "George <ilmoitin@example.com>", }
The value from
DEFAULT_FROM_EMAIL
will be used for languages not defined in that dict. -
Create a
notifications.py
file in django app and register your notification types:from django_ilmoitin.registry import notifications notifications.register("event_created", "Event created") notifications.register("event_deleted", "Event deleted")
-
Create a
dummy_context.py
file in django app and add dummy context data. Either use the codes of notifications that you registered in the previous step, or use the constCOMMON_CONTEXT
to make some variables available for all templates:from django_ilmoitin.dummy_context import COMMON_CONTEXT, dummy_context from .models import MyModel my_object = MyModel(foo="bar") dummy_context.update({ COMMON_CONTEXT: {"my_object": my_object}, "event_created": { "foo": "bar" }, "event_deleted": { "fizz": "buzz" } })
-
Import notifications and dummy context in your apps.py:
from django.apps import AppConfig class ExampleConfig(AppConfig): name = "example" def ready(self): import example.notifications import example.dummy_context
-
Go to django admin and add notification templates to your notifications
-
Send notifications. List of attachment files can be passed as last optional argument:
from django_ilmoitin.utils import send_notification context = { "foo": "bar", } attachment = "test.txt", "foo bar", "text/plain" send_notification("foo@bar.com", "event_created", context, [attachment])
-
By default, notifications will be sent immediately, if you only want to add notification to the message queue and send it later, configure
ILMOITIN_QUEUE_NOTIFICATIONS
:ILMOITIN_QUEUE_NOTIFICATIONS = True
Using the GraphQL API
The package provides an optional GraphQL API that requires a working graphene API to work, and it needs additional dependencies.
-
To install them, run:
pip install django-ilmoitin[graphql_api]
-
Add the
Query
to the entrypoint where you build your schema:
# my_app/schema.py
import django_ilmoitin.api.schema as django_ilmoitin_schema
class Query(
# other extended classes
django_ilmoitin_schema.Query,
graphene.ObjectType,
):
pass
Code format
This project uses black
for Python code formatting.
We follow the basic config, without any modifications. Basic black
commands:
- To let
black
do its magic:black .
- To see which files
black
would change:black --check .
Troubleshooting guide
- Cannot receive email even though it was sent successfully
-
Some strict spam filter might mark email as spam if its Message-ID header has suspicious domain name (e.g 158431519447.10.15335486611387428798@qa-staging-i09m9b-staging-77bd999444-p2497)
-
This is because Python tries to generate messsage id base on the FQDN of the local machine before sending email . Fortunately most of Email Sending services (Mailgun, MailChimp, Sendgrid,..) have a way to generate a reliable message-id that will likely pass spam filter, so we better let them do it.
-
If you are using
django-anymail
as the email backend, there is an easy way to remove the auto-generated Message ID usingpre_send
signal -
Example:
from anymail.signals import pre_send
@receiver(pre_send)
def remove_message_id(sender, message, **kwargs):
message.extra_headers.pop("Message-ID", None)
Note that it only works if you are using django-anymail
as your email backend
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django_ilmoitin-0.5.0.tar.gz
.
File metadata
- Download URL: django_ilmoitin-0.5.0.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.1.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b637c8a5693a427cfeb113add9aeda05e2eff7ffc6582524d8bc6f4ec283ea3 |
|
MD5 | 2b63c1f6100080db772bce2a3fda7f03 |
|
BLAKE2b-256 | c669fd58b0af144a99f3280afa5670f827c733840211b94c8318d44eda2d966f |