В чем разница между системой шаблонов Django и Django REST Framework?

Ответ

Система шаблонов Django и Django REST Framework (DRF) служат разным целям в веб-разработке, хотя обе являются частью экосистемы Django.

1. Система шаблонов Django (Django Templates)

  • Назначение: Используется для серверной генерации HTML-страниц (Server-Side Rendering, SSR). Основная задача — динамически создавать полноценные веб-страницы, которые затем отправляются браузеру пользователя.
  • Принцип работы: Работает с файлами шаблонов (.html), в которые подставляются данные из контекста представления (view). Результатом является готовая HTML-страница.
  • Пример:

    from django.shortcuts import render
    from django.http import HttpRequest, HttpResponse
    
    def home(request: HttpRequest) -> HttpResponse:
        context = {'title': 'Главная страница', 'user_name': 'Гость'}
        return render(request, 'home.html', context)

    В home.html можно использовать {{ title }} и {{ user_name }}.

2. Django REST Framework (DRF)

  • Назначение: Предназначен для создания RESTful API (Application Programming Interface). Его цель — предоставлять структурированные данные (обычно в JSON или XML) клиентским приложениям (например, SPA на React/Vue, мобильным приложениям, другим сервисам), а не готовые HTML-страницы.
  • Принцип работы: Сериализует сложные объекты Python (модели Django) в форматы, понятные клиенту, и десериализует входящие данные. Возвращает данные, а не разметку.
  • Пример:

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import status
    
    class UserListAPI(APIView):
        def get(self, request):
            # В реальном приложении здесь была бы сериализация объектов User
            users = ['Alice', 'Bob', 'Charlie']
            return Response({'users': users}, status=status.HTTP_200_OK)

Ключевые отличия:

  • Формат ответа:
    • Django Templates: Возвращает HTML (полноценные веб-страницы).
    • DRF: Возвращает структурированные данные (чаще всего JSON, иногда XML).
  • Цель:
    • Django Templates: Создание традиционных веб-сайтов с серверным рендерингом.
    • DRF: Создание API для клиентских приложений (фронтенд, мобильные, IoT).
  • Обработка данных:
    • Django Templates: Подставляет данные в HTML-шаблоны.
    • DRF: Использует сериализаторы для преобразования сложных объектов Python в примитивные типы данных и обратно.
  • Взаимодействие с клиентом:
    • Django Templates: Клиент получает готовую страницу и отображает её.
    • DRF: Клиент получает данные и сам отвечает за их отображение (например, через JavaScript на фронтенде).
  • Аутентификация/Авторизация:
    • Django Templates: Использует сессии и куки для аутентификации пользователей.
    • DRF: Поддерживает различные механизмы аутентификации, специфичные для API, такие как токены (Token, JWT), OAuth.

Выбор между ними зависит от архитектуры приложения: если нужен традиционный веб-сайт, используйте шаблоны Django; если требуется API для разделенного фронтенда или мобильного приложения, DRF — это стандартное решение.