Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Django REST Framework
Python экосистема·15 тем·206 вопросов·уровень Middle

Django REST Framework

Полный курс по Django REST Framework — фреймворку для создания веб-API на Django. Курс охватывает все ключевые аспекты: от базовых сериализаторов до продвинутых тем вроде аутентификации, прав доступа, троттлинга, фильтрации, версионирования и документирования API. Курс предназначен для разработчиков, уже знакомых с Django, и поможет вам создавать профессиональные REST API.

Начать курс

Django REST Framework

DRF снимает почти всю рутину REST API и взамен ставит несколько этажей абстракций: ModelSerializer сам собирает поля из модели, ViewSet сам собирает действия, Router сам собирает URL. Пока всё работает — это экономит недели. Когда перестаёт, главный вопрос — на каком из этажей смотреть, и курс во многом про это.

Пятнадцать тем. Сначала сериализаторы: ручной Serializer рядом с ModelSerializer, чтобы было видно, что именно генерируется автоматически, затем валидация на трёх уровнях (поле, объект, модель) и вложенные сериализаторы с их вечной проблемой записи. Дальше представления по возрастанию магии — от APIView через generic-классы к ViewSet с роутерами, и понимание, где остановиться.

Доступ разбирается тремя темами: аутентификация (Token, JWT, Session, OAuth2 — что выбирать для SPA, мобильного приложения и сервис-к-сервису), права, включая object-level, и троттлинг с собственными классами.

Остальное — то, что просят от любого публичного API: фильтрация, поиск и сортировка через django-filter, пагинация и её три стиля, версионирование (URL, параметр, заголовок), настройка формата ответа через renderer, тесты с APIClient, схема OpenAPI через drf-spectacular. Отдельная тема — производительность: select_related и prefetch_related под вложенные сериализаторы, где именно возникает N+1 и как его увидеть.

Уровень — middle. Нужен рабочий Django: модели, ORM, представления. Самому Django курс не учит.

  1. 1

    Введение в DRF

    Обзор DRF, установка, настройка проекта, первый сериализатор

    12 вопросов
  2. 2

    Сериализаторы

    Базовые сериализаторы, ModelSerializer, валидация, вложенные сериализаторы

    14 вопросов
  3. 3

    Представления

    Function-based views, Class-based views, Generic views, ViewSets

    14 вопросов
  4. 4

    Роутинг

    SimpleRouter, DefaultRouter, кастомные роутеры, URL-конфигурация

    12 вопросов
  5. 5

    Аутентификация

    Token, JWT, Session, OAuth2 — механизмы аутентификации в DRF

    14 вопросов
  6. 6

    Права доступа

    Встроенные и кастомные permissions, object-level доступ

    14 вопросов
  7. 7

    Троттлинг

    Ограничение частоты запросов, кастомные throttle-классы

    14 вопросов
  8. 8

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

    FilterBackend, SearchFilter, OrderingFilter, django-filter

    14 вопросов
  9. 9

    Пагинация

    Стили пагинации, кастомная пагинация, настройка вывода

    14 вопросов
  10. 10

    Версионирование API

    URL, query params, headers — стратегии версионирования

    14 вопросов
  11. 11

    Кастомизация ответов

    Renderer classes, кастомные responses, форматирование вывода

    14 вопросов
  12. 12

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

    APIClient, тесты для views, моки, best practices тестирования

    14 вопросов
  13. 13

    Документирование API

    OpenAPI/Swagger, drf-spectacular, drf-yasg

    14 вопросов
  14. 14

    Оптимизация производительности

    select_related, prefetch_related, оптимизация запросов, кэширование

    14 вопросов
  15. 15

    Best Practices

    Структура проекта, обработка ошибок, логирование, безопасность

    14 вопросов
  16. Зачёт

    Доступен после всех тем (0 из 15)

  17. Экзамен

    Доступен после зачёта

31 / 31

Сериализатор (Serializer)

Сериализаторы

Компонент DRF, который преобразует сложные типы данных (модели Django, queryset) в простые типы Python для последующей сериализации в JSON/XML, и обратно — десериализует данные из запроса в Python-объекты.

Пример

class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'email']

Связанные термины

ModelSerializer

Сериализаторы

Подкласс Serializer, который автоматически создаёт поля на основе модели Django. Предоставляет готовую реализацию методов create() и update().

Пример

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

Связанные термины

Вложенный сериализатор

Сериализаторы

Использование одного сериализатора внутри другого для представления связанных объектов. Позволяет включать вложенные данные в ответ API.

Пример

class AuthorSerializer(serializers.ModelSerializer): books = BookSerializer(many=True, read_only=True) class Meta: model = Author fields = ['name', 'books']

Связанные термины

Валидация данных

Сериализаторы

Процесс проверки входящих данных на корректность перед сохранением. В DRF валидация происходит в сериализаторе через методы validate() и validate_<field>().

Пример

def validate_price(self, value): if value < 0: raise serializers.ValidationError('Цена не может быть отрицательной') return value

Связанные термины

@api_view

Представления

Декоратор для function-based views в DRF. Преобразует обычную функцию в DRF view, добавляя обработку методов HTTP, аутентификацию, права доступа и другие возможности фреймворка.

Пример

@api_view(['GET', 'POST']) def user_list(request): if request.method == 'GET': return Response(User.objects.all())

Связанные термины

ViewSet

Представления

Класс, который объединяет логику для набора связанных views (list, create, retrieve, update, destroy). Используется с роутерами для автоматической генерации URL-паттернов.

Пример

class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer

Связанные термины

Generic View

Представления

Базовые классы представлений в DRF, предоставляющие готовую логику для типовых операций: ListAPIView, RetrieveAPIView, CreateAPIView и их комбинации.

Пример

class UserList(generics.ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer

Связанные термины

Mixin

Представления

Базовые классы, предоставляющие отдельные действия (list, create, retrieve, update, destroy) для использования в кастомных views.

Пример

class CustomView(ListModelMixin, CreateModelMixin, GenericAPIView): def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs)

Связанные термины

Роутер (Router)

Роутинг

Компонент DRF, который автоматически генерирует URL-паттерны для ViewSet. DefaultRouter и SimpleRouter — встроенные реализации.

Пример

router = DefaultRouter() router.register(r'users', UserViewSet) urlpatterns = router.urls

Связанные термины

Аутентификация

Аутентификация и права

Процесс проверки личности пользователя. DRF предоставляет несколько классов аутентификации: TokenAuthentication, SessionAuthentication, BasicAuthentication.

Пример

REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', ] }

Связанные термины

Права доступа (Permission)

Аутентификация и права

Механизм, определяющий, имеет ли пользователь право на выполнение запроса. Встроенные классы: IsAuthenticated, IsAdminUser, AllowAny, DjangoModelPermissions.

Пример

class IsOwnerOrReadOnly(permissions.BasePermission): def has_object_permission(self, request, view, obj): return obj.owner == request.user

Связанные термины

Токен аутентификации

Аутентификация и права

Строковый ключ, выдаваемый пользователю после успешной аутентификации. Используется в заголовке Authorization для последующих запросов.

Пример

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

Связанные термины

JWT (JSON Web Token)

Аутентификация и права

Стандарт RFC 7519 для безопасной передачи информации между сторонами в виде JSON. В DRF реализуется через библиотеку djangorestframework-simplejwt.

Пример

from rest_framework_simplejwt.views import TokenObtainPairView class MyTokenView(TokenObtainPairView): pass

Связанные термины

Троттлинг (Throttling)

Проектирование API

Механизм ограничения частоты запросов от клиентов. Защищает API от злоупотреблений и DDoS-атак.

Пример

REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', ], 'DEFAULT_THROTTLE_RATES': {'anon': '100/day'} }

Связанные термины

Filter Backend

Фильтрация и пагинация

Класс, предоставляющий механизм фильтрации queryset. Встроенные: DjangoFilterBackend, SearchFilter, OrderingFilter.

Пример

class UserList(generics.ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer filter_backends = [filters.SearchFilter] search_fields = ['username', 'email']

Связанные термины

SearchFilter

Фильтрация и пагинация

Класс фильтрации, позволяющий выполнять поиск по заданным полям через query-параметр ?search=.

Пример

search_fields = ['username', 'email', 'first_name'] # GET /users/?search=john

Связанные термины

Пагинация

Фильтрация и пагинация

Разбиение большого набора данных на страницы. DRF предоставляет несколько стилей: PageNumberPagination, LimitOffsetPagination, CursorPagination.

Пример

class StandardPagination(PageNumberPagination): page_size = 20 page_size_query_param = 'page_size'

Связанные термины

CursorPagination

Фильтрация и пагинация

Пагинация на основе курсора — указателя на позицию в наборе данных. Подходит для больших наборов данных, обеспечивает стабильность при изменении данных.

Пример

class CreatedCursorPagination(CursorPagination): ordering = '-created_at' page_size = 20

Связанные термины

Версионирование API

Проектирование API

Механизм поддержки нескольких версий API одновременно. Стратегии: URLPathVersioning, NamespaceVersioning, QueryParameterVersioning, HeaderVersioning.

Пример

REST_FRAMEWORK = { 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', 'DEFAULT_VERSION': 'v1' }

Связанные термины

Renderer

Проектирование API

Класс, отвечающий за форматирование ответа API. Встроенные: JSONRenderer, BrowsableAPIRenderer, HTMLRenderer.

Пример

REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', ] }

Связанные термины

Parser

Проектирование API

Класс, разбирающий тело запроса в Python-объекты. Встроенные: JSONParser, FormParser, MultiPartParser.

Пример

REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', ] }

Связанные термины

APIClient

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

Тестовый клиент DRF, расширяющий Django Client. Позволяет делать запросы к API с аутентификацией и проверкой ответов.

Пример

from rest_framework.test import APIClient client = APIClient() client.force_authenticate(user=user) response = client.get('/api/users/')

Связанные термины

force_authenticate

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

Метод APIClient для принудительной аутентификации пользователя в тестах без необходимости передавать токен.

Пример

client.force_authenticate(user=user) response = client.post('/api/articles/', data)

Связанные термины

OpenAPI (Swagger)

Проектирование API

Спецификация для описания REST API. В DRF реализуется через drf-spectacular или drf-yasg для автоматической генерации документации.

Пример

from drf_spectacular.views import SpectacularAPIView urlpatterns = [ path('api/schema/', SpectacularAPIView.as_view(), name='schema'), ]

Связанные термины

select_related

Производительность

Метод Django ORM для оптимизации запросов к связанным объектам через JOIN. Используется для ForeignKey и OneToOneField.

Пример

queryset = Article.objects.select_related('author').all()

Связанные термины

prefetch_related

Производительность

Метод Django ORM для оптимизации запросов к связанным объектам через отдельный запрос и соединение в Python. Используется для ManyToMany и reverse ForeignKey.

Пример

queryset = Author.objects.prefetch_related('books').all()

Связанные термины

N+1 проблема

Производительность

Антипаттерн, когда для получения N связанных объектов выполняется N+1 запрос к базе данных. Решается через select_related/prefetch_related.

Пример

# Плохо: N+1 запросов for article in Article.objects.all(): print(article.author.name) # Хорошо: 2 запроса for article in Article.objects.select_related('author').all(): print(article.author.name)

Связанные термины

Контекст сериализатора

Сериализаторы

Словарь с дополнительными данными, передаваемый в сериализатор через context. Доступен в self.context внутри сериализатора.

Пример

serializer = UserSerializer(user, context={'request': request}) # В сериализаторе: email = self.context['request'].user.email

Связанные термины

HyperlinkedModelSerializer

Сериализаторы

Подкласс ModelSerializer, который использует гиперссылки вместо первичных ключей для представления связей между объектами.

Пример

class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ['url', 'username', 'email']

Связанные термины

write_only поле

Сериализаторы

Поле сериализатора, которое используется только для записи (входящих данных), но не включается в ответ. Например, поле пароля.

Пример

password = serializers.CharField(write_only=True) # или extra_kwargs = {'password': {'write_only': True}}

Связанные термины

read_only поле

Сериализаторы

Поле сериализатора, которое включается только в ответ, но игнорируется при валидации входящих данных.

Пример

created_at = serializers.DateTimeField(read_only=True) # или extra_kwargs = {'created_at': {'read_only': True}}

Связанные термины

Частые вопросы о курсе «Django REST Framework»

Состав курса, уровни, практика и способы проверки знаний.

Что входит в курс «Django REST Framework»?

Курс включает 15 тем и 206 вопросов с разбором ответа. Начать можно с первой темы курса.

Для какого уровня рассчитан курс «Django REST Framework»?

Маршрут охватывает уровни Middle. Темы расположены от основы к более сложным инженерным задачам, поэтому можно начать с подходящего места и не пропускать важные зависимости.

Как проверить, что материал усвоен?

После прохождения тем доступен зачёт по курсу «Django REST Framework» — 20 случайных вопросов с порогом 80%. После зачёта открывается экзамен с развёрнутыми ответами и автоматической оценкой, приближённый к техническому собеседованию.

Курс «Django REST Framework» бесплатный?

Да, курс полностью бесплатный: все 15 тем доступны без оплаты.