> В чем разница ListAPIView и APIView в Django REST Framework (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: Sunlight

Стек: Python

> Пример ответа

Основное различие между APIView и ListAPIView в Django REST Framework заключается в уровне абстракции и встроенной функциональности.

APIView - это базовый класс для создания любых кастомных представлений. Он предоставляет низкоуровневый контроль над HTTP-методами (GET, POST, PUT, DELETE и т.д.) и требует от разработчика ручной реализации логики обработки запросов, сериализации, пагинации и формирования ответа.

ListAPIView - это специализированный класс, наследующий от GenericAPIView и примешивающий ListModelMixin. Он предназначен только для получения списка объектов (GET-запросы). В нём уже реализована логика:

  • Автоматическое получение queryset из модели.
  • Применение сериализатора к данным.
  • Поддержка пагинации, фильтрации и сортировки "из коробки".
  • Возврат списка объектов в ответе.

Пример использования ListAPIView:

PYTHON
from rest_framework.generics import ListAPIView
from .models import Book
from .serializers import BookSerializer
class BookList(ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer

Для APIView пришлось бы писать аналогичную логику вручную:

PYTHON
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Book
from .serializers import BookSerializer
class BookList(APIView):
def get(self, request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)

Таким образом, ListAPIView сокращает boilerplate-код и подходит для стандартных сценариев, а APIView даёт полную гибкость для нестандартной логики (например, работа с несколькими моделями, сложная валидация или нестандартные HTTP-методы).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью