J'ai une vue API Django Python REST comme ceci:Pourquoi les décorateurs de l'API REST de Django rompent-ils le décorateur Django non_atomic_requests?
from rest_framework.decorators import api_view, permission_classes
from django.db import transaction
@api_view([ 'POST' ])
@permission_classes((IsAuthenticated,))
@transaction.non_atomic_requests
def myview(request):
with transaction.atomic():
db_do_something1()
with transaction.atomic():
do_do_something2()
return some_response
Le SQL fait courir contre ma base de données PostgreSQL dans ce cas crée savepoints avant et après db_do_something1
et 2
- mais critique ne commettras pas après avoir quitté la avec des blocs.
La vue entière est toujours entourée d'un BEING
et COMMIT
est uniquement envoyée à la base de données à la fin de la vue.
Si je déplace le décorateur @transaction.non_atomic_requests
au début de la liste des décorateurs, alors j'obtiens le comportement correct, chaque bloc with
étant dans sa propre transaction et validant à la fin.
Que se passe-t-il ici?