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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 172
  • Облачные технологии14 136
  • QA вакансии3 451
  • Backend вакансии2 051
  • Инженер данных1 762
  • Продакт-менеджер1 226

Разработка

  • Android1 854
  • iOS1 694
  • Fullstack вакансии978
  • AI вакансии944
  • Frontend вакансии735
  • Mobile вакансии43

По стеку

  • Go8 740
  • Java6 589
  • Node.js2 029
  • .NET1 734
  • Kotlin1 615
  • Rust1 473
  • C#715
  • PHP692
  • C++581

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

  • Kubernetes7 760
  • DevOps вакансии6 073
  • Linux-инфраструктура5 498
  • Terraform / IaC4 270
  • CI/CD3 273
  • Мониторинг и Observability1 791
  • SRE553
  • Кибербезопасность444

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

  • Data Scientist1 115
  • Бизнес-аналитик916
  • Аналитик данных832
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США42 450
  • Вакансии в Европе23 519
  • Вакансии в Канаде4 333
  • Работа в России3 786

По формату

  • Удалённые вакансии72 089
  • Релокация в США42 450
  • Гибридная работа12 458
  • Офисная работа7 066

По уровню

  • Senior вакансии41 491
  • Middle вакансии20 265
  • Junior вакансии6 499

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

Все компании
  • Rakuten189 вакансий
  • Wise189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Что такое сигналы (signals) в Django, когда их стоит использовать и когда следует избегать?

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

Сигналы — встроенный pub-sub в Django: post_save, pre_delete и др. Подключаются через @receiver, регистрируются в AppConfig.ready(). Хороши для инвалидации кэша и создания связанных объектов, но скрывают бизнес-логику и усложняют отладку.

Подключение сигнала: декоратор и connect()

# myapp/signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import UserProfile

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    """Автоматически создаёт профиль при создании пользователя."""
    if created:
        UserProfile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    """Сохраняет профиль вместе с пользователем."""
    if hasattr(instance, "profile"):
        instance.profile.save()

Сигналы нужно зарегистрировать в AppConfig.ready():

# myapp/apps.py
from django.apps import AppConfig

class MyAppConfig(AppConfig):
    name = "myapp"
    default_auto_field = "django.db.models.BigAutoField"

    def ready(self):
        import myapp.signals  # noqa: F401 — регистрация сигналов

Сигналы (signals) в Django

Сигналы — механизм publish-subscribe внутри процесса Django. Отправитель (sender) публикует событие, один или несколько получателей (receivers) реагируют на него. Это позволяет компонентам взаимодействовать, не зная друг о друге напрямую.

Встроенные сигналы Django

  • pre_save / post_save — до и после вызова Model.save()
  • pre_delete / post_delete — до и после удаления объекта
  • m2m_changed — при изменении ManyToMany-отношения
  • pre_migrate / post_migrate — до и после применения миграций
  • request_started / request_finished — жизненный цикл HTTP-запроса

Кастомный сигнал

# myapp/signals.py
from django.dispatch import Signal, receiver

# Объявление сигнала
article_published = Signal()  # sender передаётся при отправке

# Отправка из модели или сервиса
class Article(models.Model):
    def publish(self):
        self.status = "published"
        self.save()
        article_published.send(sender=self.__class__, article=self)

# Подписка
@receiver(article_published)
def notify_subscribers(sender, article, **kwargs):
    # отправить уведомления подписчикам
    from .tasks import send_notifications
    send_notifications.delay(article.pk)

Когда использовать сигналы

  • Создание связанных объектов при сохранении (например, профиль пользователя).
  • Инвалидация кэша после изменения модели.
  • Логирование изменений в audit-таблице.
  • Уведомления между decoupled приложениями внутри монолита.

Когда избегать сигналов

  • Бизнес-логика, которая должна быть явной — лучше вынести в сервисный слой или метод модели.
  • Сложные цепочки зависимостей: сигнал A → сигнал B → сигнал C трудно отлаживать.
  • Вызов внешних API или тяжёлых операций — используйте Celery tasks, запускаемые из post_save максимально лаконично.
  • Критичные транзакционные операции — сигнал может выполниться, но транзакция откатиться.

Сигналы и транзакции: on_commit()

from django.db import transaction

@receiver(post_save, sender=Article)
def schedule_indexing(sender, instance, created, **kwargs):
    # Запускать задачу только после успешного коммита транзакции
    transaction.on_commit(lambda: index_article.delay(instance.pk))

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

  • Сигналы не работают при QuerySet.update() и QuerySet.delete() — эти методы обходят Model.save() и Model.delete().
  • Дублирование регистрации: если import myapp.signals вызывается дважды (например, при горячей перезагрузке), обработчик подпишется дважды. Используйте параметр dispatch_uid: @receiver(post_save, sender=User, dispatch_uid="create_profile").
  • Сигналы синхронны и выполняются в том же потоке и транзакции. Исключение в сигнале откатит всю транзакцию.
  • Забытый import myapp.signals в ready() — сигналы не регистрируются; код выглядит рабочим, но ничего не происходит.
  • Тяжёлые операции в post_save без on_commit могут выполниться при откате транзакции — always use transaction.on_commit() для side effects.
  • Сигналы усложняют тестирование: при тесте одной модели неожиданно срабатывают обработчики другого приложения. Используйте disconnect() или mock.patch в тестах.
  • Отладка: невозможно легко понять, кто и где подписан на сигнал — в больших проектах это создаёт «магию», усложняющую онбординг.

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

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

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

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

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

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

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

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

Источники

  • https://docs.djangoproject.com/en/5.2/topics/db/models/
  • https://docs.djangoproject.com/en/5.2/topics/http/views/

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

Djangoapi-designtechnical-reasoning

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

  • Sr Software Engineer - Remote
  • Middle Python Developer
  • Staff Software Engineer
  • Software Engineer
  • Senior Software Engineer - Full Stack - Portal Platform