Skip to main content

A simple Django package to integrate Web Push Notification in your Application

Project description

Django-Webpush

Django-Webpush is a Package made for integrating and sending Web Push Notification in Django Application. This is a Work in Progress package. As the `Web Push Notification specification <https://www.w3.org/TR/push-api/>`__ is still in draft, things may change soon. So keep updated.

Currently, it Supports Sending Push Notification to Firefox 46+ and Chrome 52+.


Installation and Setup

You can install it easily from pypi by running

pip install django-webpush

After installing the package, add webpush in in your INSTALLED_APPS settings

INSTALLED_APPS = (
    ...
    'webpush',
)

If you would like to send notification to Google Chrome Users, you need to add a WEBPUSH_SETTINGS entry with the Vapid Credentials Like following:

WEBPUSH_SETTINGS = {
    "VAPID_PUBLIC_KEY": "Vapid Public Key",
    "VAPID_PRIVATE_KEY":"Vapid Private Key",
    "VAPID_ADMIN_EMAIL": "admin@example.com"
}

Replace ``”Vapid Public Key”`` and ``”Vapid Private Key”`` with your Vapid Keys. Also replace ``admin@example.com`` with your email so that the push server of browser can reach to you if anything goes wrong.

To know how to obtain Vapid Keys please see this ```py_vapid`` <https://github.com/web-push-libs/vapid/tree/master/python>`__ and `Google Developer Documentation <https://developers.google.com/web/fundamentals/push-notifications/subscribing-a-user#how_to_create_application_server_keys>`__. You can obtain one easily from `web-push-codelab.glitch.me <https://web-push-codelab.glitch.me/>`__. ``Application Server Keys`` and ``Vapid Keys`` both are same.

Then include webpush in the urls.py

urlpatterns =

    url(r'^webpush/', include('webpush.urls'))
]

Then run Migration by ``python manage.py migrate``

Adding Web Push Information in Template

So in template, you need to load webpush_notifications custom template tag by following: > - If you are using built in templating engine, add {% load webpush_notifications %} in the template > - If you are using jinja or other templating engine, you can manually add the html header and button and other information. Documentation for them is coming soon. Working on getting a automated way for jinja users. If you would like to add support for them, patch are very much welcome.

Next, inside the <head></head> tag add {% webpush %}. Like following

<head>
  {% webpush %}
</head>

Next, inside the <body></body> tag, insert {% webush_button %} where you would like to see the Subscribe to Push Messaging Button. Like following

<body>
  <p> Hello World! </p>
  {% webpush_button %}
</body>

Note: The Push Notification Button will show only if the user is logged in or any group named is passed through webpush context

*If you would like to mark the subscription as a group, like all person subscribe for push notification from the template should be marked as group and would get same notification, you should pass a ``webpush`` context to the template through views. The ``webpush`` context should have a dictionary like ``{“group”: group_name}``* . Like following

 webpush = {"group": group_name } # The group_name should be the name you would define.

return render(request, 'template.html',  {"webpush":webpush})

Note: If you dont pass group through the webpush context, only logged in users can see the button for subscription and able to get notification.


Sending Web Push Notification

A Web Push generally have a header and body. According to the W3C Specification, the data should be encrypted in transmission. the data is addressed as payload generally. Also a TTL header should be included indicating how much time the web push server store the data if the user is not online. So in order to send notification, see below.

  • If you would like to send notification to a specific group, do like following:

    from webpush import send_group_notification
    
    payload = {"head": "Welcome!", "body": "Hello World"}
    
    send_group_notification(group_name="my_group", payload=payload, ttl=1000)
    # All subscribe subscribe through "my_group" will get a web push notification. A ttl of 1000 is passed so the web push server will store the data maximum 1000 milliseconds if any user is not online
  • If you would like to send Notification to a specific user, do like following ``` from webpush import send_user_notification

    payload = {“head”: “Welcome!”, “body”: “Hello World”}

    send_user_notification(user=user, payload=payload, ttl=1000) # Here in the user parameter, a user object should be passed # The user will get notification to all of his subscribed browser. A user can subscribe many browsers. ``` And the subscribers will get a notification like Web Push Notification

License

Copyright © 2016 by Safwan Rahman

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

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-webpush-0.2.2.2.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

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

django_webpush-0.2.2.2-py2.py3-none-any.whl (17.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django-webpush-0.2.2.2.tar.gz.

File metadata

File hashes

Hashes for django-webpush-0.2.2.2.tar.gz
Algorithm Hash digest
SHA256 d99d6b0af2bc7da573eb62b038503f1a90a72a302ff12f57bd0a2397a24a1d1c
MD5 3376d431086c4e134c166d298eaaaee2
BLAKE2b-256 4cb82f51d210b62344ffa4ba06afd3c15c25142972c08a48cfb03e2017c57df1

See more details on using hashes here.

File details

Details for the file django_webpush-0.2.2.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_webpush-0.2.2.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2bc4156da853db40785ca8cc88302b531a7df341dddeb861b679163aa9ae8398
MD5 b71ccb36741cfe4abf9ca5eb9f1e4da6
BLAKE2b-256 6570882566931d74434e99d08fe1a73c05f26fadeb2b4792eda6007bb77d2395

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