Ответ
Для создания API-эндпоинтов в Django стандартным решением является использование Django REST Framework (DRF). Процесс включает три основных компонента: Serializer, View и URL.
Задача: Создать эндпоинт /api/products/ для получения списка продуктов из базы данных.
1. Модель (models.py)
Сначала определим модель данных.
# myapp/models.py
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
2. Сериализатор (serializers.py)
Сериализатор преобразует сложные типы данных, такие как queryset'ы Django, в нативные типы Python, которые затем легко рендерятся в JSON.
# myapp/serializers.py
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name', 'price'] # Поля для вывода в API
3. Представление (views.py)
View обрабатывает HTTP-запросы. Он извлекает данные с помощью ORM, использует сериализатор для их преобразования и возвращает Response.
# myapp/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Product
from .serializers import ProductSerializer
@api_view(['GET'])
def get_product_list(request):
# Получаем все активные продукты из БД
products = Product.objects.filter(is_active=True)
# Сериализуем queryset (many=True указывает, что это список объектов)
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
4. Маршрутизация (urls.py)
Наконец, связываем URL-адрес с нашим представлением.
# myapp/urls.py
from django.urls import path
from .views import get_product_list
urlpatterns = [
path('products/', get_product_list),
]
Теперь при GET-запросе на /api/products/ (с учетом корневого URL) API вернет JSON-массив с продуктами.