Распространенный способ обработки транзакций в Интернете заключается в том, чтобы оборачивать каждый запрос в транзакцию. В Django вы можете установить для ATOMIC_REQUESTS
значение True в конфигурации каждой базы данных, для которой вы хотите включить это поведение.
Это работает так. Перед вызовом функции представления Django запускает транзакцию. Если ответ получен без проблем, Django фиксирует транзакцию. Если представление создает исключение, Django откатывает транзакцию.
Хотя простота этой модели транзакций привлекательна, она также делает ее неэффективной при увеличении трафика. Открытие транзакции для каждого представления имеет некоторые накладные расходы.
Для запросов, которые не нужно оборачивать в транзакции, вы можете применить декоратор @transaction.non_atomic_requests
.
Дан Django view.py
с несколькими классами View и методами запроса. Как я могу решить, какие запросы будут хорошими кандидатами для неатомарного декоратора?
Какие "подводные камни" могут скрываться?
Я мог видеть, что POST
методы не являются хорошими кандидатами или чем-то еще с .save()
, но на что еще я должен обратить внимание?