Тепер, коли ви достатньо підготовлені, час закатати рукави та створити свій перший повноцінний API. Це буде чудова нагода застосувати всі знання, які ви отримали на попередніх лекціях. Наші цілі такі:
- Навчитися послідовно створювати API для моделі даних.
- Вибудувати процес роботи: від визначення моделі до тестування API.
- Застосувати знання про Serializer, APIView та маршрутизацію.
- Освоїти тестування вашого API за допомогою інструментів, таких як Postman або curl.
Постановка задачі
Ми створимо API для управління моделлю "Стаття" (Article). Функціональність API включатиме:
- Отримання списку всіх статей
GET. - Отримання деталей однієї статті
GETз параметром ID. - Створення нової статті
POST. - Оновлення існуючої статті
PUT. - Видалення статті
DELETE.
Визначення моделі "Стаття"
Спочатку додамо модель в додаток blog. Якщо у вас ще немає додатку blog, створіть його:
python manage.py startapp blog
Тепер додамо модель Article у файл models.py додатку blog:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=255) # Заголовок статті
content = models.TextField() # Зміст статті
created_at = models.DateTimeField(auto_now_add=True) # Дата створення
updated_at = models.DateTimeField(auto_now=True) # Дата оновлення
def __str__(self):
return self.title
Далі, зробимо міграції для бази даних:
python manage.py makemigrations
python manage.py migrate
Створення серіалізатора для моделі
Серіалізатори в DRF допомагають перетворювати дані між форматом JSON і об'єктами Django-моделей. Для початку створимо файл serializers.py у додатку blog, якщо його ще немає.
Додамо код:
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__' # Включаємо всі поля моделі
3. Створення представлень для API
Тепер ми створимо API для роботи з моделлю Article. Ми будемо використовувати APIView для більшої гнучкості. Відкрийте файл views.py у додатку blog і додайте наступний код:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.shortcuts import get_object_or_404
from .models import Article
from .serializers import ArticleSerializer
class ArticleListCreateAPIView(APIView):
"""
API для отримання списку статей та створення нових статей.
"""
def get(self, request):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
def post(self, request):
serializer = ArticleSerializer(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)
class ArticleDetailAPIView(APIView):
"""
API для отримання, оновлення та видалення конкретної статті.
"""
def get(self, request, pk):
article = get_object_or_404(Article, pk=pk)
serializer = ArticleSerializer(article)
return Response(serializer.data)
def put(self, request, pk):
article = get_object_or_404(Article, pk=pk)
serializer = ArticleSerializer(article, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
article = get_object_or_404(Article, pk=pk)
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
Налаштування маршрутизації
Тепер підключимо наші представлення до маршрутів. Відкрийте файл urls.py у додатку blog (якщо файлу немає, створіть його) і додайте наступний код:
from django.urls import path
from .views import ArticleListCreateAPIView, ArticleDetailAPIView
urlpatterns = [
path('articles/', ArticleListCreateAPIView.as_view(), name='article-list-create'),
path('articles/<int:pk>/', ArticleDetailAPIView.as_view(), name='article-detail'),
]
Не забудьте підключити маршрути додатку blog до загальних маршрутів проєкту. Відкрийте urls.py в основному проєкті і додайте:
from django.urls import path, include
urlpatterns = [
path('api/', include('blog.urls')), # Підключаємо маршрути додатку blog
]
Тестування API
Тепер запустимо сервер розробки і протестуємо API. Запустіть сервер:
python manage.py runserver
Тестування через браузер
Відкрийте в браузері такі URL:
GETсписок статей:http://127.0.0.1:8000/api/articles/POSTнова стаття:http://127.0.0.1:8000/api/articles/GETдеталі статті:http://127.0.0.1:8000/api/articles/<id>/PUTоновлення статті:http://127.0.0.1:8000/api/articles/<id>/DELETEвидалення статті:http://127.0.0.1:8000/api/articles/<id>/
Тестування через Postman
- Для
GETзапитів вкажіть URL і натисніть "Send". - Для
POSTзапитів відправте JSON, наприклад:{ "title": "Перша стаття", "content": "Зміст першої статті" } - Аналогічно, для
PUTзапитів вкажіть оновлені дані. - Для
DELETEзапитів просто відправте запит без тіла.
Можливі помилки та їх вирішення
- Помилка 404 при отриманні об'єкта: переконайтеся, що ви використовуєте правильний ID статті.
- Помилка 400 при створенні статті: перевірте валідність JSON-даних. Поля
titleіcontentє обов'язковими. - Помилка 500: перевірте логи сервера для виявлення проблеми. Можливо, ви забули зробити міграції.
Ідеї для покращення
- Додайте валідацію полів у серіалізаторі, наприклад, мінімальну довжину для
title. - Реалізуйте відображення статей з пагінацією.
- Розширте API, додавши пошук або фільтрацію за назвою статей.
Тепер у вас є базове, але повністю робоче API для роботи з моделлю "Стаття". Ми тільки почали занурення в потужні можливості Django REST Framework, і попереду нас чекають ще більш цікаві завдання.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ