No project description provided
Project description
Django Redux
=============================
Facilities to bridge the gap between Django and Redux.
Quickstart
----------
::
$ pip install django_redux
$ npm install django_redux
Create a file called `engine.py` for your project::
from django_redux.engine import action
from django_redux.consumers import 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 WebsocketBridge (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 { WebsocketBridge } from '../utils/WebsocketBridge';
const store = createStore(
reducer,
);
WebsocketBridge.connect();
WebsocketBridge.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 { WebsocketBridge } from 'django_redux';
export const incrementCounter = createAction(ActionTypes.INCREMENT_COUNTER, (incrementBy) => {
WebsocketBridge.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'},
})
Credits
-------
Most of this code is adapted from `johnpaulett/channel_chat <https://github.com/johnpaulett/channel_chat>`_.
=============================
Facilities to bridge the gap between Django and Redux.
Quickstart
----------
::
$ pip install django_redux
$ npm install django_redux
Create a file called `engine.py` for your project::
from django_redux.engine import action
from django_redux.consumers import 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 WebsocketBridge (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 { WebsocketBridge } from '../utils/WebsocketBridge';
const store = createStore(
reducer,
);
WebsocketBridge.connect();
WebsocketBridge.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 { WebsocketBridge } from 'django_redux';
export const incrementCounter = createAction(ActionTypes.INCREMENT_COUNTER, (incrementBy) => {
WebsocketBridge.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'},
})
Credits
-------
Most of this code is adapted from `johnpaulett/channel_chat <https://github.com/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.2.tar.gz
(3.5 kB
view hashes)
Built Distribution
Close
Hashes for django_redux-0.0.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bea1e681e6d502809227d205be0d42d25001448661f1c04cb636da9f9f1562a9 |
|
MD5 | a89f2465381c127235365a5672d5c3f4 |
|
BLAKE2b-256 | b893394c86cc52c26ddb8e79bbd73e5ab9cdb31a24754734d3afa850702f842a |