Как создать REST API на Django за 30 минут с Django REST Framework?

Что такое REST API и зачем он нужен?

REST API (Representational State Transfer Application Programming Interface) – это архитектурный стиль построения сетевых приложений, который определяет набор правил для создания масштабируемых и поддерживаемых веб-сервисов. REST API позволяет различным приложениям обмениваться данными, независимо от их технологической платформы.

Зачем он нужен? REST API необходим для интеграции различных систем, предоставления данных для мобильных приложений, создания одностраничных приложений (SPA) и других современных веб-архитектур. Он обеспечивает гибкость, масштабируемость и простоту использования.

Преимущества использования Django REST Framework

Django REST Framework (DRF) – это мощный и гибкий инструмент для создания RESTful API на Django. Его преимущества:

  • Простота и удобство: DRF предоставляет готовые компоненты для сериализации, аутентификации, разрешений и маршрутизации, что значительно упрощает разработку API.
  • Гибкость: DRF позволяет настраивать практически все аспекты API, от форматов данных до политик безопасности.
  • Интеграция с Django: DRF тесно интегрирован с Django, что позволяет использовать все возможности Django ORM и других Django-приложений.
  • Поддержка веб-интерфейса: DRF предоставляет browsable API, который позволяет тестировать API прямо в браузере.
  • Широкая поддержка: Большое сообщество и активная разработка гарантируют актуальность и поддержку библиотеки.

Необходимые инструменты и предварительная настройка

Для работы с DRF вам потребуется:

  • Python (версия 3.7 или выше).
  • Django (версия 3.0 или выше).
  • pip (менеджер пакетов Python).
  • Любимый текстовый редактор или IDE (PyCharm, VS Code и т.д.).

Настройка Django проекта и установка Django REST Framework

Создание нового Django проекта

Создайте новый Django проект с помощью команды:

django-admin startproject myproject
cd myproject

Установка Django REST Framework через pip

Установите DRF с помощью pip:

pip install djangorestframework

Добавление ‘restframework’ в INSTALLEDAPPS

Добавьте rest_framework в INSTALLED_APPS в файле myproject/settings.py:

# myproject/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
]

Создание сериализаторов

Определение модели Django для API

Предположим, вы хотите создать API для управления рекламными кампаниями. Определите модель Campaign в myproject/myapp/models.py (если у вас нет приложения, создайте его командой python manage.py startapp myapp):

# myapp/models.py

from django.db import models

class Campaign(models.Model):
    name: models.CharField = models.CharField(max_length=200)
    budget: models.DecimalField = models.DecimalField(max_digits=10, decimal_places=2)
    start_date: models.DateField = models.DateField()

    def __str__(self) -> str:
        return self.name

Затем выполните миграции:

python manage.py makemigrations
python manage.py migrate

Создание сериализатора для модели

Создайте файл myproject/myapp/serializers.py и определите сериализатор для модели Campaign:

# myapp/serializers.py

from rest_framework import serializers
from .models import Campaign


class CampaignSerializer(serializers.ModelSerializer):
    class Meta:
        model = Campaign
        fields = '__all__'

    def validate_budget(self, value: float) -> float:
        """
        Проверяет, что бюджет кампании не отрицательный.
        """
        if value < 0:
            raise serializers.ValidationError("Бюджет не может быть отрицательным.")
        return value
Реклама

Объяснение полей сериализатора и их типов

Сериализатор преобразует данные модели в формат JSON (или другие форматы) и обратно. Поле fields = '__all__' указывает, что нужно сериализовать все поля модели. Можно указать конкретные поля, например: fields = ['id', 'name', 'budget']. Также в примере показана валидация поля budget.

Создание ViewSet и URL-маршрутов

Создание ViewSet для CRUD операций

Создайте файл myproject/myapp/views.py и определите ViewSet для модели Campaign:

# myapp/views.py

from rest_framework import viewsets
from .models import Campaign
from .serializers import CampaignSerializer

class CampaignViewSet(viewsets.ModelViewSet):
    queryset = Campaign.objects.all()
    serializer_class = CampaignSerializer

Использование ModelViewSet для быстрого прототипирования

ModelViewSet предоставляет готовые реализации для всех стандартных CRUD (Create, Read, Update, Delete) операций.

Настройка URL-маршрутов с помощью routers

В файле myproject/urls.py настройте URL-маршруты для ViewSet:

# myproject/urls.py

from django.urls import include, path
from rest_framework import routers
from myapp import views

router = routers.DefaultRouter()
router.register(r'campaigns', views.CampaignViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

Тестирование API в браузере (DRF browsable API)

Запустите Django development server:

python manage.py runserver

Откройте в браузере http://127.0.0.1:8000/campaigns/. Вы увидите browsable API, который позволяет создавать, просматривать, редактировать и удалять рекламные кампании.

Дополнительные возможности и улучшения

Настройка разрешений доступа (permissions)

DRF предоставляет различные классы разрешений для контроля доступа к API. Например, IsAuthenticated требует, чтобы пользователь был аутентифицирован, а IsAdminUser требует, чтобы пользователь был администратором. Настроить разрешения можно в ViewSet:

# myapp/views.py

from rest_framework import viewsets, permissions
from .models import Campaign
from .serializers import CampaignSerializer

class CampaignViewSet(viewsets.ModelViewSet):
    queryset = Campaign.objects.all()
    serializer_class = CampaignSerializer
    permission_classes = [permissions.IsAuthenticated]

Использование аутентификации (authentication)

DRF поддерживает различные методы аутентификации, такие как Session Authentication, Token Authentication и JWT (JSON Web Token) Authentication. Для использования Token Authentication добавьте rest_framework.authtoken в INSTALLED_APPS и выполните миграции. Затем настройте DEFAULT_AUTHENTICATION_CLASSES в settings.py.

Пагинация и фильтрация данных

DRF предоставляет инструменты для пагинации и фильтрации данных, что особенно полезно для API, работающих с большими объемами данных. Можно настроить пагинацию глобально в settings.py или для конкретного ViewSet.

Заключение и дальнейшие шаги

В этой статье мы рассмотрели основы создания REST API на Django за 30 минут с помощью Django REST Framework. Вы научились создавать сериализаторы, ViewSet и URL-маршруты, а также настраивать разрешения доступа и аутентификацию.

Дальнейшие шаги:

  • Изучите более сложные возможности DRF, такие как custom serializers, generic views и throttling.
  • Настройте тестирование API с помощью Django test framework.
  • Разверните API на production-сервере с использованием Gunicorn или uWSGI.

Добавить комментарий