Django JsonResponse
last modified January 9, 2023
Django JsonResponse tutorial shows how to send JSON data with JsonResponse in Django.
Django
Django is a high-level Python web framework. It encourages rapid development and clean, pragmatic design. Django's primary goal is to ease the creation of complex, database-driven websites.
Django is maintained by the Django Software Foundation.
JSON
JSON (JavaScript Object Notation) is a lightweight data-interchange
format. The official Internet media type for JSON is application/json. The JSON
filename extension is .json. It is easy for humans to read and
write and for machines to parse and generate.
Django JsonResponse
JsonResponse is an HttpResponse subclass that helps to
create a JSON-encoded response. Its default Content-Type header is set to
application/json. The first parameter, data, should be a dict
instance. If the safe parameter is set to False, any
object can be passed for serialization; otherwise only dict instances are
allowed.
Django JsonResponse example
In the following example, we create a Django application that sends
a file to the client. The file is a JPEG image, which
is located in the images directory in the project
root directory.
$ mkdir jsonresponse $ cd jsonresponse $ mkdir src $ cd src
We create the project and the and src directories.
Then we locate to the src directory.
$ django-admin startproject jsonresponse .
We create a new Django project in the src directory.
Note: If the optional destination is provided, Django will use that existing directory as the project directory. If it is omitted, Django creates a new directory based on the project name. We use the dot (.) to create a project inside the current working directory.
$ cd .. $ pwd /c/Users/Jano/Documents/pyprogs/django/jsonresponse
We locate to the project directory.
$ tree /f
src
│ manage.py
│
└───jsonresponse
settings.py
urls.py
views.py
wsgi.py
__init__.py
These are the contents of the project directory.
Note: The Django way is to put functionality into apps, which
are created with django-admin startapp. In this tutorial, we do not
use an app to make the example simpler. We focus on demonstrating how to send
JSON response.
from django.contrib import admin
from django.urls import path
from .views import send_json
urlpatterns = [
path('admin/', admin.site.urls),
path('sendjson/', send_json, name='send_json'),
]
We add a new route page; it calls the send_json
function from the views.py module.
from django.http import JsonResponse
def send_json(request):
data = [{'name': 'Peter', 'email': 'peter@example.org'},
{'name': 'Julia', 'email': 'julia@example.org'}]
return JsonResponse(data, safe=False)
Inside send_json, we define a list of dictionaries.
Since it is a list, we set safe to False.
If we did not set this parameter, we would get a TypeError
with the following message:
In order to allow non-dict objects to be serialized set the safe parameter to False.
By default, JsonResponse accepts only Python dictionaries.
$ python manage.py runserver
We run the server and navigate to http://127.0.0.1:8000/sendjson/.
$ curl localhost:8000/sendjson/
[{"name": "Peter", "email": "peter@example.org"},
{"name": "Julia", "email": "julia@example.org"}]
We use the curl tool to make the GET request.
In this article, we have demonstrated how to send JSON data in Django.