Django REST Framework

Django REST Framework (DRF) - самый популярный пакет для создания REST API в Django.

Установка

1# Установка пакета
2pip install djangorestframework
1# Или через Poetry
2poetry add djangorestframework

Базовая настройка

 1# settings.py
 2INSTALLED_APPS = [
 3    'rest_framework',
 4]
 5
 6REST_FRAMEWORK = {
 7    'DEFAULT_PERMISSION_CLASSES': [
 8        'rest_framework.permissions.IsAuthenticated',
 9    ],
10    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
11    'PAGE_SIZE': 20
12}

Создание API

1# serializers.py
2from rest_framework import serializers
3from .models import Book
4
5class BookSerializer(serializers.ModelSerializer):
6    class Meta:
7        model = Book
8        fields = ['id', 'title', 'author', 'published_date']
1# views.py
2from rest_framework import viewsets
3from .serializers import BookSerializer
4
5class BookViewSet(viewsets.ModelViewSet):
6    queryset = Book.objects.all()
7    serializer_class = BookSerializer

Настройка URL

 1# urls.py
 2from rest_framework.routers import DefaultRouter
 3from .views import BookViewSet
 4
 5router = DefaultRouter()
 6router.register(r'books', BookViewSet)
 7
 8urlpatterns = [
 9    path('api/', include(router.urls)),
10]

Фильтрация и поиск

 1# views.py
 2from django_filters.rest_framework import DjangoFilterBackend
 3from rest_framework.filters import SearchFilter, OrderingFilter
 4
 5class BookViewSet(viewsets.ModelViewSet):
 6    queryset = Book.objects.all()
 7    serializer_class = BookSerializer
 8    filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
 9    filterset_fields = ['author', 'category']
10    search_fields = ['title', 'description']
11    ordering_fields = ['title', 'published_date']

FAQ

Q: Как добавить фильтрацию?
A: Используй django-filter с DjangoFilterBackend.

Q: Как настроить пагинацию?
A: Настрой PAGE_SIZE в REST_FRAMEWORK или создай кастомный пагинатор.