A re-usable bridge between Django channels and Redux Edit
Project description
A re-usable bridge between Django channels and Redux.
Quickstart
$ pip install django_redux $ npm install django_redux
Create a file called engine.py for your project:
from django_redux import action, ReduxConsumer class MyConsumer(ReduxConsumer): def connect(self, message, **kwargs): if message.user.is_authenticated(): self.send({ 'type': 'SET_USER', 'user': { 'username': self.message.user.username, } }) # This method will be called when the `INCREMENT_COUNTER` action gets # fired from the JS via the reduxBridge (see below). @action('INCREMENT_COUNTER') def incr_counter(self, message): self.group_send('broadcast', {'type': 'INCREMENTED_COUNTER', 'incrementBy': message['incrementBy']})
Create a file called routing.py for your project:
from channels.routing import route_class from .consumers import MyConsumer channel_routing = [ route_class(MyConsumer), ]
in your settings:
CHANNEL_LAYERS = { 'default': { 'BACKEND': 'asgi_redis.RedisChannelLayer', 'CONFIG': { 'hosts': [('localhost', 6379)], }, 'ROUTING': 'myproject.routing.channel_routing', }, }
In your js entry point:
import React from 'react'; import { render } from 'react-dom'; import { Provider } from 'react-redux'; import { createStore, } from 'redux'; import reducer from '../reducers'; import Root from '../containers/Root.react'; import { reduxBridge } from 'django_redux'; const store = createStore( reducer, ); reduxBridge.connect(); reduxBridge.listen(store); render( <Provider store={store}> <Root /> </Provider>, document.getElementById('root') );
To send an action from redux:
import { createAction } from 'redux-actions'; import ActionTypes from './constants'; import { reduxBridge } from 'django_redux'; export const incrementCounter = createAction(ActionTypes.INCREMENT_COUNTER, (incrementBy) => { reduxBridge.send({ type: ActionTypes.INCREMENT_COUNTER, incrementBy }); });
To send an action from channels:
from django_redux import send_action send_action('mygroup', { 'type': 'ACTION_NAME', 'payload': {'any': 'thing'}, })
TODO:
- Tests
send_action
Data binding
- Docs
ReduxConsumer.get_control_channel
Multiplexing
Credits
Most of this code is adapted from johnpaulett/channel_chat.
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
django_redux-0.0.9.tar.gz
(9.3 kB
view details)
Built Distribution
File details
Details for the file django_redux-0.0.9.tar.gz
.
File metadata
- Download URL: django_redux-0.0.9.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ca3bf6fd5bbe872e02fc2281c73dd5fdea05629d3108e59c04c1a6d2edf5959 |
|
MD5 | 17d1896c2aec7452859688b4f0f98bde |
|
BLAKE2b-256 | 994285c8f1d33df61bb9b17cda53dcc08a3751978ae936b778bf3a8a8fe715ce |
File details
Details for the file django_redux-0.0.9-py2.py3-none-any.whl
.
File metadata
- Download URL: django_redux-0.0.9-py2.py3-none-any.whl
- Upload date:
- Size: 136.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fadb5a98ebca846f870a58eacefa089311bd923ae40988296b2c70bc5427030 |
|
MD5 | faef4fd2f48a8ce9035fb4963eecbd01 |
|
BLAKE2b-256 | 6bff345276d633bf51e7c3a29571c9346f96f3662bd5c0cc7a3f0788f6f3bdbd |