Skip to main content

About

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 pass custom kwargs to json.dumps, just give them to constructor:

@to_json('plain', separators=(',', ':'))
def custom_kwargs(request):
   return ['a', { 'b': 1 }]
GET /
["a",{"b":1}]

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
});

Metadata

Release files for django-jsonresponse 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-jsonresponse 0.10.0
File Size Uploaded
django-jsonresponse-0.10.0.tar.gz 4.8 kB Details

Release files / django-jsonresponse-0.10.0.tar.gz

Download URL django-jsonresponse-0.10.0.tar.gz
Size 4.8 kB
Tags Source
SHA-256 checksum
How to use checksums
439dbd10a256a8fb87278394201788fe601b38890481c707cb8314b448295c59
BLAKE2b-256 checksum
How to use checksums
06479025f80b59af0aa19684e4564e5b813ad5c84927265eb6ad7d6beae6cf63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.10.0 This release

1 release file

0.9.0

1 release file

0.8.2

1 release file

0.8.1

1 release file

0.8

1 release file

0.7

1 release file

0.6

1 release file

0.5

2 release files

0.4

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page