2015-07-30 2 views
3

Я действительно не понимаю, как атомарные запросы заданы в Django. Если параметр ATOMIC_REQUESTS установлен в True в настройках БД, это означает, что все представления теперь выполняются в транзакции? Что делать, если я хочу, чтобы в транзакции выполнялись только определенные виды? Должен ли я затем явно определять все остальные, которые не выполняются в транзакции с помощью декоратора @transaction.non_atomic_requests?Django Сделки ATOMIC_REQUESTS

ответ

6

Когда параметр ATOMIC_REQUESTS установлен в True в настройках БД, это означает, что все представления теперь выполняются в транзакции?

Да. От docs:

Перед вызовом функции просмотра Django начинает транзакцию. Если ответ создается без проблем, Django совершает транзакцию. Если представление создает исключение, Django возвращает транзакцию.

ли я тогда нужно явно определить все остальные, которые не работают в сделке с @transaction.non_atomic_requests декоратора?

Да.

Когда включено ATOMIC_REQUESTS, все еще возможно предотвратить запуск просмотров в транзакции. Декоратор non_atomic_requests] будет отменять эффект ATOMIC_REQUESTS для данного вида.

После того, как вы находитесь в точке принятия решения на индивидуальной основе к случаю, когда следует использовать транзакции, хотя, я предпочитаю не использовать ATOMIC_REQUESTS и просто использовать transaction.atomic (будь то в качестве декоратора или менеджера контекста), где это необходимо. Вот пример из the documentation:

@transaction.atomic 
def viewfunc(request): 
    # This code executes inside a transaction. 
    do_stuff() 
+1

так, если я использую 'transaction.atomic' на вид без' включен ATOMIC_REQUESTS' и он будет использовать атомную сделку по этой точке зрения? Извините за явное задание, но для меня документы не дают четкого ответа на эти вопросы. –

+1

@ip .: Да, это верно для любой функции или блока кода, включая представление. –

+0

Если нужно, см. Мой [ответ на откат внутри атомного блока] (https://stackoverflow.com/a/48680207/777285). –