SSE(Server-Sent Events) for DjangoRestFramework
Project description
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
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
drf-sse-1.0.1.tar.gz
(3.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fe3179754d50956cd548269f55d12391fe1368f8a91ddf54475e36c096ccecc
|
|
| MD5 |
209d2c251dbc13473c60c0559a566c02
|
|
| BLAKE2b-256 |
a00279ca1f8f7924afc9ca005f47f5bb4c15600953cb4dec846549365e36d366
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0020a4a167795384b8c611367f7de2d6eecc368c51f9948b464d90671babff3
|
|
| MD5 |
3afff84feca1917c9f0149dec6a2f953
|
|
| BLAKE2b-256 |
2428dfed04a56eba595b9b573d630d3766159a5580f53cf67b21eaac8ae99fee
|