Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kilgoretrout1985/django_infopush
Django reusable app, what allows to send web push.
https://github.com/kilgoretrout1985/django_infopush
django django-app django-application django-reusable django-webpush fcm fcm-notifications gcm gcm-notification notification notifications push push-notification push-notifications python vapid web-push webpush webpush-message webpush-notifications
Last synced: about 1 month ago
JSON representation
Django reusable app, what allows to send web push.
- Host: GitHub
- URL: https://github.com/kilgoretrout1985/django_infopush
- Owner: kilgoretrout1985
- License: mit
- Created: 2019-03-15T08:05:37.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-10-07T12:36:59.000Z (about 2 years ago)
- Last Synced: 2024-10-01T18:08:26.799Z (about 2 months ago)
- Topics: django, django-app, django-application, django-reusable, django-webpush, fcm, fcm-notifications, gcm, gcm-notification, notification, notifications, push, push-notification, push-notifications, python, vapid, web-push, webpush, webpush-message, webpush-notifications
- Language: Python
- Size: 542 KB
- Stars: 8
- Watchers: 1
- Forks: 2
- Open Issues: 3
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
===============
django_infopush
===============django_infopush is a Django reusable app, that allows to gather push
subscriptions and send web push notifications to browsers.**It is a full featured reusable app which includes:**
* frontend & backend code which gathers push subscriptions and saves them to DB,
* service worker to show notifications, manage clicks and basic notification statistics,
* django admin interface where you create new push tasks (title, text, icon, url, image, time to send) and view stats for the old ones,
* django management command to perform your tasks (send notifications to subscribers)... image:: https://raw.githubusercontent.com/kilgoretrout1985/django_infopush/master/docs/img/push_admin_list_thumb.png
:target: https://raw.githubusercontent.com/kilgoretrout1985/django_infopush/master/docs/img/push_admin_list.pngThis app covers 99% webpush needs for content web-sites than you just want
to send an announcement of a new blog post for example. Just make a new push
task in the admin and job is done... image:: https://raw.githubusercontent.com/kilgoretrout1985/django_infopush/master/docs/img/push_admin_add_thumb.png
:target: https://raw.githubusercontent.com/kilgoretrout1985/django_infopush/master/docs/img/push_admin_add.png**Known limitations:**
* You better have access to CRON on your server, because push tasks are send
using `python manage.py pushsend` management command. And running it manually
every time sounds like a bad idea. Although for testing purposes manual calls
will do well.Quick start
-----------1. `pip install django-infopush`
2. Add "django.contrib.humanize" (if not in INSTALLED_APPS already) and
"commonstuff", "push" to your INSTALLED_APPS setting like this::INSTALLED_APPS = [
# ...
'django.contrib.humanize',
'commonstuff',
'push',
]3. Enable sites framework in Django, see `official docs
`_.4. Configure django_infopush in your project settings.py file. At least your
DJANGO_INFOPUSH_VAPID_PUBLIC_KEY and DJANGO_INFOPUSH_VAPID_PRIVATE_KEY
(you can simply generate them `here `_).You also have to set DJANGO_INFOPUSH_VAPID_ADMIN_EMAIL with your
site admin or support address, so that push-server administration can
reach you if something goes wrong.E.g.::
DJANGO_INFOPUSH_VAPID_PUBLIC_KEY = 'AHf42JhrMtFOXAG2OYTmEoBvKNcEsxmYF5pqvYd4InFEEU0x41HzymPQRtcvJZp9iNpDQK4GuTGMWAgn0E8G8IZ'
DJANGO_INFOPUSH_VAPID_PRIVATE_KEY = 'CcmbGJ9wce7596DoObRzyPHNktPRo5CSCdericz7Pf7'
DJANGO_INFOPUSH_VAPID_ADMIN_EMAIL = '[email protected]'See `docs/SETTINGS.rst
`_
for more.5. **If** project uses MySQL, make sure it's version is 5.7.7 or greater
and add the following line to project's settings.py::SILENCED_SYSTEM_CHECKS = ['mysql.E001']
See `docs/MYSQL.rst
`_
for details.6. Run `python manage.py migrate` to create push models.
7. Include URLconf in your project urls.py like this::
from django.urls import re_path, include
from django.conf import settings
from django.views.generic import TemplateView
from django.views.decorators.cache import cache_pageurlpatterns = [
# ...
re_path(r'^push/', include('push.urls')),
re_path(r'^service-worker.js$', cache_page(1 if settings.DEBUG else 86400)(TemplateView.as_view(
template_name="push/service-worker.js",
content_type='application/javascript; charset='+settings.DEFAULT_CHARSET,
)), name='service-worker.js'),
]8. Add `{% include 'push/_head_include.html' %}` into head-section of your
django-project's html template(s). Do not include it on the pages where you
don't want to see push-subscribe browser window. Visit your website to
become first subscriber (currently Chrome and FF support webpush, not
Safari).9. Visit http://127.0.0.1:8000/admin/push/ to create first push task.
10. CRON setup for `python manage.py pushsend` management command
(every 5-10 minutes). You can also run this command manually for testing
purposes.11. (OPTIONAL) Run `python manage.py test push` for basic check of the app.