Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 208новых вакансий за сутки·91 464вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 137
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 131
  • Облачные технологии14 071
  • QA вакансии3 448
  • Backend вакансии2 087
  • Инженер данных1 783
  • Продакт-менеджер1 222

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии976
  • AI вакансии943
  • Frontend вакансии738
  • Mobile вакансии44

По стеку

  • Go8 685
  • Java6 537
  • Node.js2 024
  • .NET1 723
  • Kotlin1 612
  • Rust1 462
  • C#710
  • PHP682
  • C++574

DevOps и инфраструктура

  • Kubernetes7 766
  • DevOps вакансии6 046
  • Linux-инфраструктура5 493
  • Terraform / IaC4 271
  • CI/CD3 241
  • Мониторинг и Observability1 790
  • SRE564
  • Кибербезопасность445

Аналитика и данные

  • Data Scientist1 120
  • Бизнес-аналитик913
  • Аналитик данных834
  • Системный аналитик150

Другие направления

  • Проджект-менеджер600
  • UI/UX дизайн143
  • Ручное тестирование14

По регионам

  • Вакансии в США43 099
  • Вакансии в Европе23 432
  • Вакансии в Канаде4 376
  • Работа в России3 903

По формату

  • Удалённые вакансии72 764
  • Релокация в США43 097
  • Гибридная работа12 388
  • Офисная работа7 092

По уровню

  • Senior вакансии41 717
  • Middle вакансии20 190
  • Junior вакансии6 562

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме DjangoВсе вопросы
DjangoJuniorКодинг

Что такое Django REST Framework (DRF) и как работают сериализаторы?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

DRF — библиотека для построения REST API на Django; сериализаторы преобразуют модели в JSON и обратно, выполняют валидацию через is_valid() и сохраняют данные через save(), вызывающий create() или update().

Что такое Django REST Framework

Django REST Framework (DRF) — это библиотека поверх Django, предоставляющая инструменты для построения Web API: сериализаторы, generic views, viewsets, routers, аутентификацию, пермиссии и пагинацию. Устанавливается через pip и регистрируется в INSTALLED_APPS.

pip install djangorestframework
# settings.py
INSTALLED_APPS = [
    ...
    "rest_framework",
]

Что делают сериализаторы

Сериализатор выполняет три задачи:

  • Сериализация — преобразует Python-объект (модель Django, queryset) в примитивный словарь, который затем JSON-энкодер превращает в байты.
  • Десериализация и валидация — принимает входные данные (из запроса), проверяет их и возвращает очищенные значения через validated_data.
  • Сохранение — через методы create() и update() записывает данные в базу.

Базовый Serializer

from rest_framework import serializers


class ArticleSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(max_length=255)
    published = serializers.BooleanField(default=False)
    created_at = serializers.DateTimeField(read_only=True)

    def create(self, validated_data):
        return Article.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.title = validated_data.get("title", instance.title)
        instance.published = validated_data.get("published", instance.published)
        instance.save()
        return instance

ModelSerializer — быстрый путь

ModelSerializer автоматически генерирует поля из модели Django, избавляя от ручного перечисления. Достаточно указать модель и список полей.

from rest_framework import serializers
from .models import Article


class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ["id", "title", "published", "created_at"]
        read_only_fields = ["id", "created_at"]

    def validate_title(self, value):
        """Валидация одного поля."""
        if len(value) < 5:
            raise serializers.ValidationError("Title must be at least 5 characters.")
        return value

    def validate(self, attrs):
        """Кросс-полевая валидация."""
        if attrs.get("published") and not attrs.get("title"):
            raise serializers.ValidationError("Published articles must have a title.")
        return attrs

Использование сериализатора в view

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Article
from .serializers import ArticleSerializer


@api_view(["GET", "POST"])
def article_list(request):
    if request.method == "GET":
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        return Response(serializer.data)

    elif request.method == "POST":
        serializer = ArticleSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()  # вызывает create()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

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

Для ForeignKey и M2M DRF предоставляет несколько вариантов представления: первичный ключ (PrimaryKeyRelatedField), строковое представление (StringRelatedField) или вложенный сериализатор.

class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ["id", "name"]


class ArticleSerializer(serializers.ModelSerializer):
    author = AuthorSerializer(read_only=True)  # вложенный объект
    author_id = serializers.PrimaryKeyRelatedField(
        queryset=Author.objects.all(), source="author", write_only=True
    )

    class Meta:
        model = Article
        fields = ["id", "title", "author", "author_id"]

Подводные камни

  • N+1 запросы с вложенными сериализаторами. Каждый вложенный объект без select_related/prefetch_related генерирует отдельный SQL-запрос. Всегда оптимизируйте queryset в view.
  • fields = "__all__" в Meta. Удобно для прототипа, но легко случайно экспонировать чувствительные поля (пароль, токены). Всегда явно перечисляйте поля.
  • is_valid() без raise_exception. Если забыть вызвать is_valid() перед обращением к validated_data, Django бросит AssertionError. Используйте serializer.is_valid(raise_exception=True) в API-views.
  • create()/update() не вызываются автоматически. save() вызывает их косвенно; если нужна транзакция, оберните в transaction.atomic() внутри метода.
  • Вложенная запись без кастомных create/update. DRF по умолчанию не умеет создавать связанные объекты через вложенные сериализаторы при записи — нужно переопределять методы вручную.
  • SerializerMethodField и производительность. Каждое поле типа SerializerMethodField вызывает Python-функцию на каждый объект; при большом queryset это заметно.

Типичные ошибки

  • Описывать drf serializers только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом Django и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет drf serializers через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Django →

Источники

  • https://www.django-rest-framework.org/api-guide/serializers/
←Предыдущий вопросКак реализовать кастомный middleware в Django?Следующий вопрос→Что лучше — class-based views (CBV) или function-based views (FBV)? Плюсы и минусы.

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

Djangoapi-designimplementationtechnical-reasoning

Вакансии с этим навыком

  • Senior Software Engineer - Full Stack - Portal Platform
  • Middle Python Developer
  • Python Backend / AI Engineer
  • AI/AI Agent Developer (Python)
  • Full Stack Engineer, Contract

Частые вопросы на собеседовании

  • Как Django защищает от SQL-инъекций, CSRF и XSS-атак?
  • Как организовать настройки, secrets и environment-specific config без утечек?
  • Объясните жизненный цикл запроса/ответа в Django — от разрешения URL до HTTP-ответа.
  • Что такое проблема N+1 запросов в Django и как её обнаружить и исправить?