Skip to main content

SSE(Server-Sent Events) for DjangoRestFramework

Installation

python3 -m pip install drf-sse

Usage

1. Edit your setting.py:
INSTALL_APPS += [
    'rest_framework',
    'corsheaders',
    'drf_sse',
]

MIDDLEWARE.insert(0, 'corsheaders.middleware.CorsMiddleware')
CORS_ALLOW_ALL_ORIGINS = True

# SSE configuration
# SSE_RESPONSE_MODE = 'add'  # [optional, default: "chunk"]
SSE_ENCODE_BASE64 = True     # [optional, default: False]
2. Use in your views:
import time

from drf_sse import SSEMixin, SSEResponse
from rest_framework.views import APIView

class MyView(SSEMixin, APIView):
    def get(self, request, format=None):

        def iter_data():
            iter_data = 'This is a server-sent events response'.split()
            for part in iter_data:
                yield part
                time.sleep(1)

        return SSEResponse(iter_data())
        # return SSEResponse(iter_data(), mode='chunk', encode=False)  # will overwrite settings
3. Test from the frontend:
  • SSE_ENCODE_BASE64 = False
<body>
    <p id="result"></p>
</body>
<script>
    const eventSource = new EventSource('http://127.0.0.1:8000/sse/')
    eventSource.onmessage = (event) => {
        console.log(event)
        document.getElementById('result').innerHTML += event.data + ' '
    }
    eventSource.onopen = () => {
        console.log('sse opened.')
    }
    eventSource.addEventListener('end', () => {
        eventSource.close()
        console.log('sse closed.')
    })
</script>
Preview

  • SSE_ENCODE_BASE64 = True
<body>
    <p id="result"></p>
</body>
<script>
    const base64DecodeAndUtf8Decode = (encodedStr) => {
        const textDecoder = new TextDecoder();
        const bytes = Uint8Array.from(atob(encodedStr), c => c.charCodeAt(0));
        return textDecoder.decode(bytes);
    }

    const eventSource = new EventSource('http://127.0.0.1:8000/sse/')
    eventSource.onmessage = (event) => {
        console.log(event)
        document.getElementById('result').innerHTML += base64DecodeAndUtf8Decode(event.data) + ' '
    }
    eventSource.onopen = () => {
        console.log('sse opened.')
    }
    eventSource.addEventListener('end', () => {
        eventSource.close()
        console.log('sse closed.')
    })
</script>
Preview

Download files

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

Source Distribution

drf-sse-1.0.1.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

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

drf_sse-1.0.1-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file drf-sse-1.0.1.tar.gz.

File metadata

  • Download URL: drf-sse-1.0.1.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.8

File hashes

Hashes for drf-sse-1.0.1.tar.gz
Algorithm Hash digest
SHA256 3fe3179754d50956cd548269f55d12391fe1368f8a91ddf54475e36c096ccecc
MD5 209d2c251dbc13473c60c0559a566c02
BLAKE2b-256 a00279ca1f8f7924afc9ca005f47f5bb4c15600953cb4dec846549365e36d366

See more details on using hashes here.

File details

Details for the file drf_sse-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: drf_sse-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.8

File hashes

Hashes for drf_sse-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e0020a4a167795384b8c611367f7de2d6eecc368c51f9948b464d90671babff3
MD5 3afff84feca1917c9f0149dec6a2f953
BLAKE2b-256 2428dfed04a56eba595b9b573d630d3766159a5580f53cf67b21eaac8ae99fee

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 files

1.0.0

2 files

Supported by

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