Ответ
Django REST Framework (DRF) — это стандартный инструмент для создания REST API в Django. Его архитектура основана на трех ключевых компонентах:
-
Serializers (
serializers.ModelSerializer
)- Задача: Преобразование сложных типов данных, таких как QuerySet'ы и экземпляры моделей Django, в нативные типы Python, которые затем легко преобразуются в JSON. Также выполняют обратную задачу — валидацию и преобразование входящих данных в объекты Django.
-
Views / ViewSets (
APIView
,viewsets.ModelViewSet
)- Задача: Обработка HTTP-запросов (GET, POST, PUT, DELETE) и реализация бизнес-логики эндпоинта.
ModelViewSet
автоматически предоставляет полный набор CRUD-операций (Create, Retrieve, Update, Delete) для указанной модели.
- Задача: Обработка HTTP-запросов (GET, POST, PUT, DELETE) и реализация бизнес-логики эндпоинта.
-
Routers (
routers.SimpleRouter
,routers.DefaultRouter
)- Задача: Автоматическое создание URL-маршрутов для
ViewSet
. Это избавляет от необходимости вручную прописывать URL для каждого действия (list, detail, create и т.д.).
- Задача: Автоматическое создание URL-маршрутов для
Пример полного цикла:
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author']
# views.py
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
# urls.py
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')
urlpatterns = router.urls
Этот код создает полноценный API-эндпоинт /books/
с поддержкой всех CRUD-операций.