Django Concurrency - NurOrNuLL/ESDP-AP-5-6-TEAM-2 GitHub Wiki

Django Concurrency

Описание

Django Concurrency — это библиотека реализующая оптимистичную блокировку для Django.

Некоторые причины, по которым Вы можете захотеть использовать библиотеку django-concurrency:

Не позволяет пользователям выполнять одновременное редактирование в Django как из пользовательского интерфейса, так и из команды django. Обеспечение консистентности данных при параллельных запросах на их изменение. Легко добавить к существующим моделям (просто добавьте VersionField). Можно добавить с помощью внутренних моделей Django (например, auth.User или auth.Group). Обрабатывает http-сообщение и стандартный код Python (например, команды управления django). Предоставляет набор тестов. Может обрабатывать внешние обновления.

Как это работает

django-concurrency работает путём добавления concurrency.fields.VersionField к каждой модели. Каждый раз при сохранении записи, номер версии изменяется (используемый алгоритм зависит от реализации используемого concurrency.fields (см. Fields).

from django.db import models
from concurrency.fields import IntegerVersionField

class ConcurrentModel( models.Model ):
    version = IntegerVersionField( )
    name = models.CharField(max_length=100)

Теперь если Вы попытаетесь сделать следующее:

a = ConcurrentModel.objects.get(pk=1)
a.name = '1'

b = ConcurrentModel.objects.get(pk=1)
b.name = '2'

a.save()
b.save()

Вы получите RecordModifiedError на этапе b.save()

Каждое обновление преобразуется в следующий SQL запрос, например:

UPDATE mymodel SET version=NEW_VERSION, ... WHERE id = PK AND version = VERSION_NUMBER

Установка

Установите с помощью pip:

pip install django-concurrency

Перейдите на (https://github.com/saxix/django-concurrency), если вам нужно загрузить пакет или клонировать репозиторий.

django-concurrency не нужно добавлять в INSTALLED_APPS, если только вы не хотите запускать тесты или использовать теги шаблонов и/или интеграцию администратора.