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-channels django_redux
Create a file called engine.py for your project:
from django_redux import action, AsyncReduxConsumer class MyConsumer(AsyncReduxConsumer): async def connect(self, message): if message.user.is_authenticated: await self.send_json({ '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') async def incr_counter(self, message): await self.send_json({'type': 'INCREMENTED_COUNTER', 'incrementBy': message['incrementBy']})
In your js entry point:
// app.js 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 { WebSocketBridge } from 'django-channels'; import { eventToAction } from 'django_redux'; const store = createStore( reducer, ); export const reduxBridge = new WebSocketBridge(); reduxBridge.connect("ws://localhost:8000/ws/"); reduxBridge.addEventListener("message", eventToAction(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 './app'; export const incrementCounter = createAction(ActionTypes.INCREMENT_COUNTER, (incrementBy) => { reduxBridge.send({ type: ActionTypes.INCREMENT_COUNTER, incrementBy }); });
To send an action from the backend:
from django_redux import send_action await send_action('mygroup', { 'type': 'ACTION_NAME', 'payload': {'any': 'thing'}, })
Groups
All clients are automatically added to a group called “broadcast”.
Authenticated users are automatically added to a group called “user.{user.pk}” so you they can be conveniently addressed.
TODO:
- Tests
send_action
Data binding
- Docs
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-1.0.0.tar.gz
(3.6 kB
view hashes)
Built Distribution
Close
Hashes for django_redux-1.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5116dc04f6b6c0fce9a984b53230e3c7717e9be43fbf727dd170ad70ddc1ee1 |
|
MD5 | 9d777c86f2cc251da57ea230d857870c |
|
BLAKE2b-256 | cbebef074e9875dcf4635b5bcf8ee146500a39d6dbe3d7a6bb66e846aed278cf |