Створення RESTful API в Django за допомогою Django REST Framework

Django REST Framework (DRF) — це потужний і гнучкий інструментарій для створення веб-API. Він спрощує процес створення RESTful API, надаючи такі функції, як серіалізатори, набори переглядів і механізми автентифікації.

Налаштування 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.