Как в Django вернуть ответ в формате JSON

«Как в Django вернуть ответ в формате JSON» — вопрос из категории Django, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Django существует несколько способов вернуть JSON-ответ, но основной и рекомендуемый — использование класса JsonResponse.

1. Использование JsonResponse (рекомендуемый способ)

Класс JsonResponse из модуля django.http автоматически сериализует Python-словарь в JSON и устанавливает правильный заголовок Content-Type: application/json.

from django.http import JsonResponse

def api_data_view(request):
    data = {
        'user': 'admin',
        'status': 'ok',
        'items': [1, 2, 3]
    }
    return JsonResponse(data)

2. Ручная сериализация с HttpResponse

Этот способ более низкоуровневый. Вам нужно вручную импортировать модуль json, сериализовать данные и указать content_type.

import json
from django.http import HttpResponse

def manual_api_view(request):
    data = {'message': 'This is a manual response'}
    json_data = json.dumps(data)
    return HttpResponse(json_data, content_type='application/json')

3. Django REST Framework (DRF)

Для создания полноценных REST API, где работа с JSON является основной задачей, рекомендуется использовать Django REST Framework. Он предоставляет мощные инструменты для сериализации сложных данных (моделей, queryset'ов) и обработки API-запросов.