Skip to main content

Support for Django's request/response lifecycle to automatically handle WebSocket messages.

Project description

# django-websocket-request

[![Build Status](https://travis-ci.org/GetBlimp/django-websocket-request.png?branch=master)](https://travis-ci.org/GetBlimp/django-websocket-request) [![PyPI version](https://badge.fury.io/py/django-websocket-request.png)](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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-websocket-request-0.1.1.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

django_websocket_request-0.1.1-py2.py3-none-any.whl (10.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-websocket-request-0.1.1.tar.gz.

File metadata

File hashes

Hashes for django-websocket-request-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3daadc93a75a9542f83d6e6d267e2626afc1e687fb3d3aae345419f84244175a
MD5 c26a28979bcbee731cfcd270e563a24f
BLAKE2b-256 408e3053f9c4b4d887e5983a74483d4ac37dcdaae1c827da30764bc4ac3b23ae

See more details on using hashes here.

File details

Details for the file django_websocket_request-0.1.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_websocket_request-0.1.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0c610e06c4c31dead4f63c9f048e4648a1c8f6d2459fe182c9955d0638fb6998
MD5 be565bbac261ce960be41e97862bb1f8
BLAKE2b-256 f189acc7bfc7267b06832d00553d2277483b2256d2839826ef84ba95f4c9692b

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