🔖 Справочник: ключевые команды DRF-блока

🎯 Уроки 33–38 К оглавлению урока

⚡ Топ-команды блока

pip install djangorestframework django-filter

# GenericAPIView атрибуты
queryset = Model.objects.all()
serializer_class = ModelSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
pagination_class = PageNumberPagination

# ViewSet + Router
router = DefaultRouter()
router.register(r'items', ItemViewSet)
urlpatterns = [path('', include(router.urls))]

# Soft Delete
def delete(self): self.is_deleted = True; self.save()

# Транзакция
with transaction.atomic(): ...

# Пагинация (settings)
REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': '...', 'PAGE_SIZE': 10}

GenericAPIView — атрибуты

Атрибут / методТипНазначение
querysetатрибутНабор данных представления
serializer_classатрибутКласс сериализатора
filter_backendsатрибутСписок классов фильтрации
pagination_classатрибутКласс пагинации
lookup_fieldатрибутПоле модели для поиска (default: 'pk')
lookup_url_kwargатрибутПараметр URL для lookup_field
get_queryset()методПереопределить для динамической фильтрации
get_object()методПолучить один объект; бросает 404 при отсутствии
get_serializer_class()методРазные сериализаторы для разных методов
get_serializer()методСоздать экземпляр сериализатора
get_serializer_context()методПередать дополнительные данные сериализатору
filter_queryset(qs)методПрименить filter_backends к queryset
paginate_queryset(qs, request)методРазбить queryset на страницы

Generic Views — шпаргалка выбора

ЗадачаКласс
Получить списокListAPIView
Создать объектCreateAPIView
Получить один объектRetrieveAPIView
Обновить объектUpdateAPIView
Удалить объектDestroyAPIView
Список + созданиеListCreateAPIView
Чтение + обновлениеRetrieveUpdateAPIView
Чтение + удалениеRetrieveDestroyAPIView
Чтение + обновление + удалениеRetrieveUpdateDestroyAPIView

ViewSets — шпаргалка

ViewSetДействия
ModelViewSetlist, create, retrieve, update, partial_update, destroy
ReadOnlyModelViewSetlist, retrieve
GenericViewSetзадаётся миксинами вручную

Декоратор @action

ПараметрТипЗначение
detailboolTrue — /items/{pk}/action/, False — /items/action/
methodslistHTTP-методы: ['get'], ['post', 'put']
url_pathstrКастомный суффикс URL
url_namestrКастомное имя маршрута

Router — URL-схема

URLМетодДействие ViewSet
/items/GETlist
/items/POSTcreate
/items/{pk}/GETretrieve
/items/{pk}/PUTupdate
/items/{pk}/PATCHpartial_update
/items/{pk}/DELETEdestroy

filter_backends — параметры запроса

BackendАтрибут на классеПараметр запросаПример
DjangoFilterBackendfilterset_fields?field=value?author=Fitzgerald
SearchFiltersearch_fields?search=term?search=Gatsby
OrderingFilterordering_fields?ordering=field?ordering=-price

Пагинация — параметры запроса

КлассПараметрыПример
PageNumberPagination?page=N&page_size=N?page=2&page_size=10
LimitOffsetPagination?limit=N&offset=N?limit=5&offset=10
CursorPagination?cursor=...?cursor=bz0x...

Установка зависимостей

pip install djangorestframework
pip install django-filter

# settings.py
INSTALLED_APPS = [
    'rest_framework',
    'django_filters',
]

Миграции и запуск

python manage.py makemigrations
python manage.py migrate
python manage.py runserver