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
Built Distribution
File details
Details for the file django_redux-1.0.0.tar.gz
.
File metadata
- Download URL: django_redux-1.0.0.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ff85b1484d7c763bade92df99afecfa6ee145cb70c8bcffa0288f696010a915 |
|
MD5 | 3c003935669d0a35f05c48e08c63db57 |
|
BLAKE2b-256 | fa2562ddc3bce150df9b92f0efa760500576022086b8827ee3f511df9495b96b |
File details
Details for the file django_redux-1.0.0-py2.py3-none-any.whl
.
File metadata
- Download URL: django_redux-1.0.0-py2.py3-none-any.whl
- Upload date:
- Size: 135.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5116dc04f6b6c0fce9a984b53230e3c7717e9be43fbf727dd170ad70ddc1ee1 |
|
MD5 | 9d777c86f2cc251da57ea230d857870c |
|
BLAKE2b-256 | cbebef074e9875dcf4635b5bcf8ee146500a39d6dbe3d7a6bb66e846aed278cf |