Создание RESTful API в Django с помощью Django REST Framework

Django REST Framework (DRF) — это мощный и гибкий набор инструментов для создания веб-API. Он упрощает процесс создания RESTful API, предоставляя такие функции, как сериализаторы, viewsets и механизмы аутентификации из коробки.

Настройка Django REST Framework

Прежде чем вы сможете создать RESTful API, вам нужно установить Django REST Framework и добавить его в свой проект. Выполните следующую команду для установки DRF:

pip install djangorestframework

Затем добавьте 'rest_framework' к INSTALLED_APPS в файле settings.py:

INSTALLED_APPS = [
    ...,
    'rest_framework',
]

Создание простого API

Давайте создадим API для простой модели под названием Book. Первым шагом будет определение модели в models.py:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13)

    def __str__(self):
        return self.title

После определения модели запустите миграции для создания таблицы базы данных:

python manage.py makemigrations
python manage.py migrate

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

Сериализаторы в DRF преобразуют сложные типы данных, такие как модели Django, в JSON. Создайте сериализатор для модели Book:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

Создание представлений и URL-адресов

DRF предоставляет два основных способа создания представлений API: представления на основе функций и представления на основе классов. Здесь мы используем представления на основе классов с APIView:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer

class BookListCreateAPIView(APIView):
    def get(self, request):
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = BookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Далее настройте URL-адреса для этого представления в urls.py:

from django.urls import path
from .views import BookListCreateAPIView

urlpatterns = [
    path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]

Тестирование API

При работающем сервере вы можете протестировать API по адресу http://127.0.0.1:8000/books/ с помощью таких инструментов, как Postman или curl. Запрос GET извлекает все книги, а запрос POST позволяет создать новую книгу.

Улучшение API с помощью ViewSets

Для более краткого и повторно используемого кода вы можете использовать ViewSet и Router DRF. Вот как обновить API для использования ModelViewSet:

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookViewSet(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

Заключение

Django REST Framework упрощает создание надежных и гибких RESTful API. Используя сериализаторы, представления и маршрутизаторы, вы можете создавать API, которые легко обрабатывают сложные модели данных. С этой основой вы теперь можете исследовать расширенные функции, такие как пользовательские разрешения, разбиение на страницы и аутентификация в DRF.