Skip to main content

Simple wrap django views to render json

Project description

Wrap view functions, allowng them render python native and custom objects to json

Usage

Simple wrap returning data into json

from jsonresponse import to_json

@to_json('plain')
def hello(request):
   return dict(hello='world')
GET /hello/
{"hello": "world"}

Result can be wraped in some api manier. Note, you can pass debug=1 to pretty print response. Use JSONRESPONSE_DEFAULT_DEBUG=True to enable by default.

@to_json('api')
def goodbye(request):
   return dict(good='bye')
GET /goodbye/?debug=1
{
    "data": {
        "good": "bye"
    },
    "err": 0
}

Automaticaly error handling, note response code is 500 here

@to_json('api')
def error(request):
   raise Exception('Wooot!??')
GET /error/
{
    "err_class": "Exception",
    "err_desc": "Wooot!??",
    "data": null,
    "err": 1
}

You can pass raise=1 to raise exceptions in debug purposes instead of passing info to json response

GET /error/?raise=1
Traceback (most recent call last):
Exception: Wooot!??

You can serialize not only pure python data types. Implement serialize method on toplevel object or each element of toplevel array. Note, that request object is passed to serialize method.

class User(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def serialize(self, request):
        if request.GET.get('with_age', False):
            return dict(name=self.name, age=self.age)
        else:
            return dict(name=self.name)

@to_json('objects')
def users(request):
   return [User('Bob', 10), User('Anna', 12)]
GET /users/?with_age=1
{
    "data": [
        {
            "age": 10,
            "name": "Bob"
        },
        {
            "age": 12,
            "name": "Anna"
        }
    ],
    "err": 0
}

It is easy to use jsonp, just pass format=jsonp

GET /users/?format=jsonp
callback({
    "data": [
        {
            "name": "Bob"
        },
        {
            "name": "Anna"
        }
    ],
    "err": 0
});

You can override the name of callback method using JSONRESPONSE_CALLBACK_NAME option or query arg callback=another_callback

GET /users/?format=jsonp&callback=my_callback
my_callback({
    "data": [
        {
            "name": "Bob"
        },
        {
            "name": "Anna"
        }
    ],
    "err": 0
});

Project details


Release history Release notifications

History Node

0.10.0

History Node

0.9.0

History Node

0.8.2

History Node

0.8.1

History Node

0.8

This version
History Node

0.7

History Node

0.6

History Node

0.5

History Node

0.4

History Node

0.3

History Node

0.2

History Node

0.1

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
django-jsonresponse-0.7.tar.gz (4.5 kB) Copy SHA256 hash SHA256 Source None May 28, 2013

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page