Skip to main content

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


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)

Uploaded Source

Built Distribution

django_redux-0.0.9-py2.py3-none-any.whl (136.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django_redux-0.0.9.tar.gz.

File metadata

File hashes

Hashes for django_redux-0.0.9.tar.gz
Algorithm Hash digest
SHA256 3ca3bf6fd5bbe872e02fc2281c73dd5fdea05629d3108e59c04c1a6d2edf5959
MD5 17d1896c2aec7452859688b4f0f98bde
BLAKE2b-256 994285c8f1d33df61bb9b17cda53dcc08a3751978ae936b778bf3a8a8fe715ce

See more details on using hashes here.

File details

Details for the file django_redux-0.0.9-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_redux-0.0.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9fadb5a98ebca846f870a58eacefa089311bd923ae40988296b2c70bc5427030
MD5 faef4fd2f48a8ce9035fb4963eecbd01
BLAKE2b-256 6bff345276d633bf51e7c3a29571c9346f96f3662bd5c0cc7a3f0788f6f3bdbd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page