Channels-Redux is a package that notifies subscribers about changes in the database
Project description
Channels-Redux
Channels-Redux is a package that notifies subscribers about changes in the database
It should be paired with the npm package of the same name. The pypi package django-react-views is also useful for hydrating initial state
Exposed Modules
NotifyConsumer
This is an AsyncWebsocketConsumer that allows clients to subscribe to different models and objects and sends frames when subscribed objects are updated, created or deleted. Unless you plan on extending it's functionality you don't need to do anything with this.
NotifyRouter
NotifyRouter is a channels.routing.URLRouter that defines a default URL that routes connections to NotifyConsumer
NotifierMixin
Extending this mixin marks a model as being a 'Notifier' this means that it will send frames to subscribed clients when changes happen on the server side.
This also defines a property that returns the name of the api url for the model. By default it assumes the namespace
of your api is 'api' this can be overridden by defining API_APP_NAMESPACE
in your settings.
HyperlinkedModelSerializer
A drop-in replacement for DRF's HyperlinkedModelSerializer that fixes some issues with URL fields and relationships in a namespaced api
RestRouter
A drop-in replacement for DRF's DefaultRouter that should be used to assign the expected default base names for your api urls.
Quick Start
-
Add to installed apps
INSTALLED_APPS = [ ... 'channels_redux', ]
-
Models that you want clients to receive notifications about should extend the NotifierMixin
-
Setup your models with Django Rest Framework with the following exceptions:
- Instead of the DRF's HyperlinkedModelSerializer you should use
channels_redux.rest.HyperlinkedModelSerializer. At minimum your serializers should include the
url
and thepk
fields. - User RestRouter instead of DefaultRouter for your api routes
router = RestRouter() router.register(r'appname/modelname', viewsets.ModelNameViewSet)
- Instead of the DRF's HyperlinkedModelSerializer you should use
channels_redux.rest.HyperlinkedModelSerializer. At minimum your serializers should include the
-
Setup django-channels. Follow their docs for this with the following exceptions:
- In routing.py use the NotifyRouter
application = ProtocolTypeRouter({ "websocket": AuthMiddlewareStack(NotifyRouter()), })
- channels-redux requires channel layers, so be sure to set those up.
- In routing.py use the NotifyRouter
-
Use django-react-views to provide the initial data to your frontend
-
On the frontend use channels-redux js to setup your redux state and WebsocketHandler before rendering any react components
// In the root component that your page loads. import {WebSocketHandler, store} from 'channels-redux'; const webSocketHandler = new WebSocketHandler(store); webSocketHandler.subscribeAll();
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
Built Distribution
File details
Details for the file channels-redux-1.8.0.tar.gz
.
File metadata
- Download URL: channels-redux-1.8.0.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94d44d7f2175b4f10473843acdcb078e4be14c02dad11184e8284352aa87cc64 |
|
MD5 | 408587112c1619fa454d3b74a8f835ca |
|
BLAKE2b-256 | cb3a0d5c5c0ae855bf90ae5c71d024e43af44ec47fc0e88538d693725d3f0716 |
File details
Details for the file channels_redux-1.8.0-py3-none-any.whl
.
File metadata
- Download URL: channels_redux-1.8.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97c365d871bb31ecbd012cd3ebe5aff4c71a4b7a7d70e4c7fb104f8593db6a92 |
|
MD5 | d823f46b05f4720d37b3be9feb7e6a0d |
|
BLAKE2b-256 | a7fd59a2d194012c38074a6db578dc5ffc9cc1034cece3903e84c7d07c42fd48 |