Rennbedingungen in Django

Hier ist ein einfaches Beispiel für eine Django-Ansicht mit einer möglichen Racebedingung:

<code># myapp/views.py
from django.contrib.auth.models import User
from my_libs import calculate_points

def add_points(request):
    user = request.user
    user.points += calculate_points(user)
    user.save()
</code>

Die Racebedingung sollte ziemlich offensichtlich sein: Ein Benutzer kann diese Anforderung zweimal stellen, und die Anwendung kann möglicherweise ausgeführt werdenuser = request.user gleichzeitig, wodurch eine der Anforderungen die andere überschreibt.

Angenommen, die Funktioncalculate_points ist relativ kompliziert und führt Berechnungen aus, die auf allerlei seltsamen Dingen basieren, die nicht in einem einzigen zusammengefasst werden könnenupdate und wäre schwer in eine gespeicherte Prozedur zu setzen.

Hier ist meine Frage: Welche Verriegelungsmechanismen stehen Django zur Verfügung, um mit ähnlichen Situationen umzugehen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage