Support for Django's request/response lifecycle to automatically handle WebSocket messages.
Project description
# django-websocket-request
[](https://travis-ci.org/GetBlimp/django-websocket-request) [](http://badge.fury.io/py/django-websocket-request)
## Overview
This package provides support for transport agnostic routing to allow the Django's request/response lifecycle to automatically WebSocket messages. It borrows a WebSocket message format from [Sails.js](http://sailsjs.org/).
## Installation
Install using `pip`...
```
$ pip install django-websocket-request
```
## Usage
### ws.py
```python
# Set Django Environment
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'
from wsrequest import WebSocketRequest
message = '{"method": "GET", "url": "/api/projects/"}'
request = WebSocketRequest(message)
response = request.get_response()
print(response.content)
```
### WebSocket message format
The method key can be any HTTP method: GET, POST, PUT, DELETE, PATCH, HEAD, or OPTIONS. The url key is an absolute URL without the domain name. The data key is an optional dictionary in which the key-value pairs in used to create the method’s data payload. The token key is also optional, and used to recreate an HTTP Authorization header, Authorization: JWT YOUR_TOKEN_HERE. If you're using Django REST framework, you might like to check out [django-rest-framework-jwt](https://github.com/GetBlimp/django-rest-framework-jwt).
```json
{
"method": "POST",
"url": "/api/companies/",
"data": {
"name": "Acme Inc."
},
"token": "MY_JSON_WEB_TOKEN"
}
```
## Live Demo
Check out [GetBlimp/django-websocket-request-example](https://github.com/GetBlimp/django-websocket-request-example) for an example implementation and a live demo.
## Example implementation with sockjs + tornado
```python
import os
import json
from tornado import web, ioloop
from sockjs.tornado import SockJSRouter, SockJSConnection
# Set Django Environment
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'
from wsrequest import WebSocketRequest
class RESTAPIConnection(SockJSConnection):
def on_open(self, info):
self.send(json.dumps({'connected': True}))
def on_message(self, data):
response = WebSocketRequest(data).get_response()
self.send(response.content)
if __name__ == '__main__':
import logging
port = 8080
logging.getLogger().setLevel(logging.INFO)
Router = SockJSRouter(RESTAPIConnection, '/ws/api')
app = web.Application(Router.urls)
app.listen(port)
logging.info(" [*] Listening on 0.0.0.0:{}".format(port))
ioloop.IOLoop.instance().start()
```
[](https://travis-ci.org/GetBlimp/django-websocket-request) [](http://badge.fury.io/py/django-websocket-request)
## Overview
This package provides support for transport agnostic routing to allow the Django's request/response lifecycle to automatically WebSocket messages. It borrows a WebSocket message format from [Sails.js](http://sailsjs.org/).
## Installation
Install using `pip`...
```
$ pip install django-websocket-request
```
## Usage
### ws.py
```python
# Set Django Environment
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'
from wsrequest import WebSocketRequest
message = '{"method": "GET", "url": "/api/projects/"}'
request = WebSocketRequest(message)
response = request.get_response()
print(response.content)
```
### WebSocket message format
The method key can be any HTTP method: GET, POST, PUT, DELETE, PATCH, HEAD, or OPTIONS. The url key is an absolute URL without the domain name. The data key is an optional dictionary in which the key-value pairs in used to create the method’s data payload. The token key is also optional, and used to recreate an HTTP Authorization header, Authorization: JWT YOUR_TOKEN_HERE. If you're using Django REST framework, you might like to check out [django-rest-framework-jwt](https://github.com/GetBlimp/django-rest-framework-jwt).
```json
{
"method": "POST",
"url": "/api/companies/",
"data": {
"name": "Acme Inc."
},
"token": "MY_JSON_WEB_TOKEN"
}
```
## Live Demo
Check out [GetBlimp/django-websocket-request-example](https://github.com/GetBlimp/django-websocket-request-example) for an example implementation and a live demo.
## Example implementation with sockjs + tornado
```python
import os
import json
from tornado import web, ioloop
from sockjs.tornado import SockJSRouter, SockJSConnection
# Set Django Environment
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'
from wsrequest import WebSocketRequest
class RESTAPIConnection(SockJSConnection):
def on_open(self, info):
self.send(json.dumps({'connected': True}))
def on_message(self, data):
response = WebSocketRequest(data).get_response()
self.send(response.content)
if __name__ == '__main__':
import logging
port = 8080
logging.getLogger().setLevel(logging.INFO)
Router = SockJSRouter(RESTAPIConnection, '/ws/api')
app = web.Application(Router.urls)
app.listen(port)
logging.info(" [*] Listening on 0.0.0.0:{}".format(port))
ioloop.IOLoop.instance().start()
```
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
Close
Hashes for django-websocket-request-0.1.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3daadc93a75a9542f83d6e6d267e2626afc1e687fb3d3aae345419f84244175a |
|
MD5 | c26a28979bcbee731cfcd270e563a24f |
|
BLAKE2b-256 | 408e3053f9c4b4d887e5983a74483d4ac37dcdaae1c827da30764bc4ac3b23ae |
Close
Hashes for django_websocket_request-0.1.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c610e06c4c31dead4f63c9f048e4648a1c8f6d2459fe182c9955d0638fb6998 |
|
MD5 | be565bbac261ce960be41e97862bb1f8 |
|
BLAKE2b-256 | f189acc7bfc7267b06832d00553d2277483b2256d2839826ef84ba95f4c9692b |