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.8.tar.gz
(9.1 kB
view details)
Built Distribution
File details
Details for the file django_redux-0.0.8.tar.gz
.
File metadata
- Download URL: django_redux-0.0.8.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a632e166b6550704151fc40d5a42daf4c000eb39d100d8769565c37b18f1f52e |
|
MD5 | de3a0778a3616be0699d33fbb08f7f77 |
|
BLAKE2b-256 | 7a65ac8eda27b16e788fe44e6c878a6571ef80d82f11cba0e69698e3e795c014 |
File details
Details for the file django_redux-0.0.8-py2.py3-none-any.whl
.
File metadata
- Download URL: django_redux-0.0.8-py2.py3-none-any.whl
- Upload date:
- Size: 136.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff162a83d3f2e6ae27a35e7f6f2be7481474a0179df57a6e4d5f6739782ffd2c |
|
MD5 | 9a78294ced7d3376bab72020f7a656bd |
|
BLAKE2b-256 | 5a89c3c9a14a78e0f2432328439bb12cb64d4006133f288398327229c11987c7 |