Класс JsonResponse
Класс JsonResponse наследуется от HttpResponse и предназначен для создания
JSON-ответов в Django. Он принимает на вход данные, которые автоматически
сериализуются в JSON с помощью стандартного модуля json. В качестве первого
аргумента передается словарь или список, который будет преобразован в
JSON-строку. Класс автоматически устанавливает заголовок Content-Type
в значение 'application/json'.
Основные параметры конструктора:
-
data- данные для сериализации (словарь, список или любая структура, которую можно преобразовать в JSON); -
encoder- пользовательский класс JSON-кодировщика, наследуемый отjson.JSONEncoder; -
safe- логический флаг, определяющий, разрешена ли передача объектов, не являющихся словарями; -
json_dumps_params- словарь дополнительных параметров для функцииjson.dumps.
Синтаксис
from django.http import JsonResponse
return JsonResponse(data, safe=True, json_dumps_params=None, encoder=None)
Пример
Создадим простой JSON-ответ с данными о пользователе:
from django.http import JsonResponse
def user_profile(request):
data = {
"username": "john_doe",
"email": "john@example.com",
"age": 25,
"is_active": True
}
return JsonResponse(data)
Результат выполнения кода:
{"username": "john_doe", "email": "john@example.com", "age": 25, "is_active": true}
Пример
Отправим JSON-ответ со статусом операции и списком данных:
from django.http import JsonResponse
from myapp.models import Article
def article_list(request):
articles = Article.objects.all().values("id", "title", "status")
data = {
"status": "success",
"count": articles.count(),
"results": list(articles)
}
return JsonResponse(data)
Результат выполнения кода:
{"status": "success", "count": 2, "results": [{"id": 1, "title": "article 1", "status": "published"}, {"id": 2, "title": "article 2", "status": "draft"}]}
Пример
Используем параметр json_dumps_params для форматирования вывода:
from django.http import JsonResponse
def pretty_json_response(request):
data = {
"name": "Django",
"version": "5.0",
"features": ["ORM", "Templates", "Admin"]
}
return JsonResponse(data, json_dumps_params={"indent": 4})
Результат выполнения кода:
{
"name": "Django",
"version": "5.0",
"features": ["ORM", "Templates", "Admin"]
}
Пример
Отправим список объектов (не словарь) с параметром safe=False:
from django.http import JsonResponse
def article_titles(request):
titles = ["article 1", "article 2", "article 3"]
return JsonResponse(titles, safe=False)
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Используем параметр encoder для поддержки специфических типов данных:
from django.http import JsonResponse
from datetime import datetime
import json
class CustomJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
def article_with_date(request):
data = {
"title": "article",
"created_at": datetime.now()
}
return JsonResponse(data, encoder=CustomJSONEncoder)
Результат выполнения кода:
{"title": "article", "created_at": "2026-09-07T15:30:45.123456"}
Смотрите также
-
класс
HttpResponse,
базовый класс для всех HTTP-ответов в Django -
класс
FileResponse,
который используется для отправки файлов в ответе -
класс
StreamingHttpResponse,
который используется для потоковой передачи данных -
класс
HttpResponseRedirect,
который используется для перенаправлений