Ответ
Django REST Framework (DRF) построен на компонентной архитектуре, где каждый элемент отвечает за свою часть обработки API-запроса. Это обеспечивает гибкость и переиспользование кода.
Ключевые компоненты:
-
Serializers — отвечают за преобразование сложных типов данных (например, QuerySet'ы и экземпляры моделей Django) в нативные типы Python, которые затем легко преобразуются в JSON. Также выполняют обратный процесс (десериализацию) и валидацию данных.
-
Views и ViewSets — классы, которые обрабатывают HTTP-запросы и возвращают HTTP-ответы.
ViewSetsявляются абстракцией надViewsи объединяют логику для нескольких связанных представлений (например, для списка и для отдельного объекта) в одном классе. -
Routers — используются с
ViewSetsдля автоматического создания URL-конфигурации. Это избавляет от необходимости вручную прописывать URL-пути для стандартных CRUD-операций. -
Authentication & Permissions — механизмы для определения личности пользователя, отправившего запрос, и проверки его прав на выполнение определенного действия.
-
Filtering, Pagination, Throttling — инструменты для управления наборами данных: фильтрация по параметрам, разделение больших списков на страницы и ограничение частоты запросов от пользователей.
Пример связки компонентов:
# models.py
class Project(models.Model):
name = models.CharField(max_length=100)
# serializers.py
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ['id', 'name']
# views.py
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.all()
serializer_class = ProjectSerializer
permission_classes = [permissions.IsAuthenticated]
# urls.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'projects', ProjectViewSet)
# Роутер автоматически создаст URL-ы для list, create, retrieve, update, destroy
urlpatterns = router.urls