Если все действия выполняются последовательно в одной Django view и при ошибке нужно откатить изменения, что обычно используется?

Для связанных изменений в одной базе Django обычно используют transaction.atomic(). Если исключение выходит из блока, изменения этой транзакции откатываются.

Короткий ответ

Что ответить на собеседовании

Для связанных изменений в одной базе Django обычно используют transaction.atomic(). Если исключение выходит из блока, изменения этой транзакции откатываются.

Подробный разбор

Ответ с пояснениями

Для связанных изменений в одной базе Django обычно используют transaction.atomic(). Если исключение выходит из блока, изменения этой транзакции откатываются.

Внутри блока выполняют все операции, которые должны быть атомарными; исключения БД обычно обрабатывают снаружи этого блока, чтобы не продолжать работать со сломанной транзакцией. HTTP-вызовы, уже отправленные письма и изменения другой независимой БД автоматически не откатятся. Такие эффекты выносят после commit либо оформляют через outbox. Atomicity также не заменяет нужные блокировки и уровень изоляции при конкурентных запросах. Вложенный atomic обычно создаёт savepoint, а окончательный commit выполняется на внешнем уровне.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее