Return JSON response from a Django view

When making an API with Django I go straight to Django REST framework. However, you don’t need it at all to just return a JSON response from Django.

When you are rendering a template in Django your view probably returns an instance of the HttpResponse class. It is a common way to print some text on a webpage:

from django.http import HttpResponse


def index(request):
    return HttpResponse('Just rendering a string :)')

If you invoke the render shortcut function you are actually returning a HttpResponse too. The render function renders the template file to a string and returns a HttpResponse with the rendered template as its content.

from django.shortcuts import render


def index(request):
    return render(request, 'blog/index.html')

Besides HttpResponse Django comes with a JsonResponse class as well. This JsonResponse is actually a subclass of HttpResponse. The JsonResponse transforms the data you pass to it to a JSON string and sets the content type HTTP header to application/json.

To return JSON data from a Django view you swap out the HttpResponse for JsonResponse and pass it the data that needs to be transformed to JSON.

from django.http import JsonResponse


def index(request):
    return JsonResponse({'text': 'Just rendering some JSON :)'})

See Also

6 Non-Programming Books for Programmers