Une façon courante de gérer transactions sur le Web consiste à emballer chaque demande dans une transaction. Dans Django, vous pouvez définir ATOMIC_REQUESTS
sur True dans la configuration de chaque base de données pour laquelle vous souhaitez activer ce comportement.Quels types de demandes font un bon candidat pour `@ transaction.non_atomic_requests`?
Cela fonctionne comme ceci. Avant d'appeler une fonction de vue, Django lance une transaction. Si la réponse est produite sans problème, Django valide la transaction. Si la vue génère une exception, Django annule la transaction.
Bien que la simplicité de ce modèle de transaction soit attrayante, elle la rend également inefficace lorsque le trafic augmente. L'ouverture d'une transaction pour chaque vue a une certaine surcharge.
Pour les demandes qui n'ont pas besoin d'être enveloppées dans transactions, vous pouvez appliquer le décorateur @transaction.non_atomic_requests
.
Étant donné un Django view.py
avec plusieurs classes View et méthodes de requête. Comment pourrais-je décider quelles demandes feraient de bons candidats pour le décorateur non-atomique?
Qu'est-ce que "gotchas" pourrait être caché?
Je pouvais voir POST
méthodes ne faisant pas de bons candidats ou quoi que ce soit avec un .save()
, mais quoi d'autre devrais-je faire attention?