Как сделать endpoint транзакции в Django
Python
Junior
Без компании
Как сделать endpoint транзакции в Django
Ответы
Для создания транзакционного endpoint в Django нужно использовать декоратор `@transaction.atomic` и Django REST Framework. Вот пример:
```
from django.db import transaction
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
@api_view(['POST'])
@transaction.atomic
def create_transaction(request):
try:
# Бизнес-логика внутри транзакции
perform_operation1()
perform_operation2()
return Response({'status': 'success'}, status=status.HTTP_201_CREATED)
except Exception as e:
# Транзакция автоматически откатится при исключении
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
```
Ключевые моменты:
- `@transaction.atomic` гарантирует атомарность операций
- При любом исключении произойдет автоматический откат
- Для API лучше использовать DRF декораторы
- Все операции БД внутри блока будут частью одной транзакции
Для класс-базированных вьюшек можно использовать `@method_decorator(transaction.atomic)` или наследовать от `TransactionTestCase`.