# 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
```shell
$ pip install django-delayed-notifications
```
Add `django_notifications` to your `INSTALLED_APPS`:
```python
INSTALLED_APPS = (
...
"django_notifications",
...
)
```
Apply the migrations:
```shell
$ ./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
```python
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 objects management **
# It is possible to attach an object to the email (Optional)
notification.related_object = my_instance
# ** 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**
_attachment = Attachment.objects.create(
notification=notification,
attachment_file=File(Path("<my_file>").open("r"), name="my_file.txt")
)
# **Recipients management**
# You can provide users
notification.recipients.set("<User instance>", "<User instance>", ...)
notification.save()
# 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:
```sh
$ ./manage.py send_notifications
12 notifications sent.
```
### Templates
The application provides some basic templates for emails.
### Admin
This application provides an admin interface for notifications.
## Notes
The application is available in English and translated to French.
Raw data
{
"_id": null,
"home_page": null,
"name": "django-delayed-notifications",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "Fran\u00e7ois GU\u00c9RIN <frague59@gmail.com>",
"keywords": "delayed sending, django, notifications",
"author": null,
"author_email": "Fran\u00e7ois GU\u00c9RIN <frague59@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/39/99/24fc73eb88fa89fb6117b29c0a5bdf4d684ceca809d5f2c3d10a9c90b59b/django_delayed_notifications-0.10.1.tar.gz",
"platform": null,
"description": "# Notifications\n\nThis application sends notifications to the user and emails addresses.\nIt stores messages into a database, and sends can be delayed through a cron task.\n\n## Installation\n\n```shell\n$ pip install django-delayed-notifications\n```\n\nAdd `django_notifications` to your `INSTALLED_APPS`:\n\n```python\nINSTALLED_APPS = (\n ...\n \"django_notifications\",\n ...\n)\n```\n\nApply the migrations:\n\n```shell\n$ ./manage.py migrate\n```\n\n## Usage\n\nInstead of sending a raw email, with the `send_mail` django function, you can create a Notification object and program\nthe sending.\n\n### Notification creation\n\n```python\nfrom pathlib import Path\nfrom django_notifications.models import Notification, Attachment\nfrom django.core.files import File\nfrom django.utils.timezone import now\nfrom datetime import timedelta\n\n# **Basic creation**\nmy_instance = \"<A random object in the application>\"\nnotification = Notification.objects.create(\n subject=\"My beautiful email\",\n text_body=\"My text body\",\n html_body=\"\"\"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <meta name=\"x-apple-disable-message-reformatting\">\n <title>My beautiful email</title>\n</head>\n<body>My HTML body</body>\n</html>\n \"\"\",\n from_email=\"foo@example.org\", # Optional\n\n)\n\n# ** Related objects management **\n# It is possible to attach an object to the email (Optional)\nnotification.related_object = my_instance\n\n# ** Related objects states management **\n# When using FSM, you can provide the states from / to (Optional)\nnotification.state_from = \"active\"\nnotification.state_to = \"processing\"\n\n# **Attachments management**\n_attachment = Attachment.objects.create(\n notification=notification,\n attachment_file=File(Path(\"<my_file>\").open(\"r\"), name=\"my_file.txt\")\n)\n\n# **Recipients management**\n# You can provide users\nnotification.recipients.set(\"<User instance>\", \"<User instance>\", ...)\nnotification.save()\n\n# And / Or provides email address, `\\n` separated\nnotification.email_recipients = \"\\n\".join([\n \"foo@example.org\", \"bar@example.org\"\n])\nnotification.save()\n\n# You can set the delayed sending date\nnotification.delayed_sending_at = now() + timedelta(days=1)\nnotification.save()\n\n# Or you can send the email immediately\nnotification.send()\n```\n\n### Management command\n\nThe application provides a management command to send the emails:\n\n```sh\n$ ./manage.py send_notifications\n12 notifications sent.\n```\n\n### Templates\n\nThe application provides some basic templates for emails.\n\n### Admin\n\nThis application provides an admin interface for notifications.\n\n## Notes\n\nThe application is available in English and translated to French.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "django-delayed-notifications provides tracking of notifications, and delayed sending.",
"version": "0.10.1",
"project_urls": {
"Homepage": "https://gitlab.com/frague59/django-delayed-notifications",
"Source": "https://gitlab.com/frague59/django-delayed-notifications"
},
"split_keywords": [
"delayed sending",
" django",
" notifications"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "02e4a218284f2cce86a1de9579005ce2fafeee5f231d8723cb13e05501ee33fa",
"md5": "039e95d42c3335e6d9440120b0ca36ef",
"sha256": "fd64e54befc14df2ea9022eb8557746a6a07448bf929bee820babd86315b16af"
},
"downloads": -1,
"filename": "django_delayed_notifications-0.10.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "039e95d42c3335e6d9440120b0ca36ef",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 32730,
"upload_time": "2024-11-14T10:50:47",
"upload_time_iso_8601": "2024-11-14T10:50:47.924634Z",
"url": "https://files.pythonhosted.org/packages/02/e4/a218284f2cce86a1de9579005ce2fafeee5f231d8723cb13e05501ee33fa/django_delayed_notifications-0.10.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "399924fc73eb88fa89fb6117b29c0a5bdf4d684ceca809d5f2c3d10a9c90b59b",
"md5": "e5ca8693d0f170f1098947bf8be14d78",
"sha256": "b4a435c3f0a0bd7b2f4631695847915abf3388977d27766100418878aa03bb59"
},
"downloads": -1,
"filename": "django_delayed_notifications-0.10.1.tar.gz",
"has_sig": false,
"md5_digest": "e5ca8693d0f170f1098947bf8be14d78",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 3997307,
"upload_time": "2024-11-14T10:50:50",
"upload_time_iso_8601": "2024-11-14T10:50:50.343879Z",
"url": "https://files.pythonhosted.org/packages/39/99/24fc73eb88fa89fb6117b29c0a5bdf4d684ceca809d5f2c3d10a9c90b59b/django_delayed_notifications-0.10.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-14 10:50:50",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "frague59",
"gitlab_project": "django-delayed-notifications",
"lcname": "django-delayed-notifications"
}