Last modified: Jan 10, 2023 By Alexander Williams
How to use Django JsonResponse with example
JsonResponse is a subclass that helps us to create a JSON-encoded response. In this tutorial, we'll see how to use JsonResponse and Why we need JsonResponse?
Django version and starcture
Django version
In this tutorial, we will work with Django == 4.0. This example may not be working under 2.0.
Project starcture
pytutorial
├── db.sqlite3
├── manage.py
├── polls
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ ├── models.py
│ ├── __pycache__
│ ├── tests.py
│ └── views.py
└── pytutorial
├── asgi.py
├── __init__.py
├── __pycache__
├── settings.py
├── urls.py
└── wsgi.py
JsonResponse in an example
In polls/views.py, we'll import JsonResponse. Then we'll write a simple view.
from django.shortcuts import render
from django.http import JsonResponse
# Create your views here.
def json_response(request):
# Data
d = {"message":"Hello JsonResponse"}
# JsonResponse
return JsonResponse(d)
The json_response view: return data {"message":"Hello JsonResponse"} as JSON.
In pytutorial/urls.py, Let's create a path for the json_response view.
from django.contrib import admin
from django.urls import path
# Views
from polls.views import json_response
urlpatterns = [
path('admin/', admin.site.urls),
#
path("json/", json_response)
]
To test the view, we need to open http://localhost:8000/json/ on a browser.
As you can see in the image, we've got a JSON response.
Why we need JsonResponse
JsonResponse helps us to:
- Build a single page application
- Build API application
In polls/views.py, we'll write a simple API that sends the capital of a given country name.
from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from countryinfo import CountryInfo
# Create your views here.
@csrf_exempt
def capital_api(request):
if request.method == "POST":
# Country's name
country = request.POST.get('country')
# Capital
capital = CountryInfo(country).capital()
# Send Capital as JSON
return JsonResponse({"capital":capital})
return JsonResponse({"Output":"Capital API"})
First of all, we've added @csrf_exempt to the top of our views to avoid the token. Then got the country name from the request. Then used the countryinfo library to get the capital of a country. Finally, we've returned the capital as JSON.
In pytutorial/urls.py, we need to add a path for capital_api view.
from django.contrib import admin
from django.urls import path
# Views
from polls.views import json_response, capital_api
urlpatterns = [
path('admin/', admin.site.urls),
#
path("json/", json_response),
#
path('capital-api/', capital_api)
]
Now, Let's test our API outside of the project.
import requests
# Request
req = requests.post("http://localhost:8000/capital-api/", {"country":"united states"})
# Response
print(req.text)
Output:
{"capital": "Washington D.C."}
As you can see, we got the capital of United States as JSON and we can parse it by using the json.loads() method.