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, если только вы не хотите запускать тесты или использовать теги шаблонов и/или интеграцию администратора.