여러 사람이 데이터베이스의 행 속성을 정확히 같은 시간에 변경하거나 가능하지 않은 PUT 데이터를 변경할 수있는 Django/Tastypie 응용 프로그램을 만들었습니다. 예를 들어한 번에 한 명의 사용자 만 REST + HTTP를 사용하여 개체를 변경하도록하는 올바른 방법이 있습니까?
:
# the Django model
class Thing(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
# the Tastypie Resource
class ThingResource(ModelResource):
class Meta:
queryset = Thing.objects.all()
는 이제 사용자의 수는 어느 시점에서
Thing
의
name
또는
description
을 변경할 수 있습니다 가정 해 봅시다. 그들은 동시에 그것을 할 수 있거나 누군가가 오랜 시간 동안 응용 프로그램을 열어두고 돌아와서 변경할 수 있습니다.
내가 피하려고하는 것은 잘못된 잠정적 변경입니다.
#1 User 1: Opens app viewing Thing #1 with name = "my name", description = "my description"
#2 User 2: Opens app viewing Thing #1 (same state as User 1)
#3 User 2: Changes description of Thing #1 to "something"
#4 User 1: Changes name of Thing #1 to "some other name"
라인 #4
후 것 # 1의 상태가 name = "some other name", description = "something"
대신 name = "some other name", description = "my description"
해야한다 : 다음과 같은 상황을 감안할 때.
서버의 개체가 변경되기 전에 응용 프로그램이 (실시간으로 또는 페이지의 데이터를 정기적으로 업데이트하여) 알 수 없다고 가정 할 때 이러한 상황을 어떻게 방지 할 수 있습니까?
업데이트를 할 때마다 필드를 추가하는 것을 고려한 sequence = models.PositiveIntegerField()
입니다. 따라서 업데이트가 발생하면 개체의 유효 기간이 만료되었는지 여부를 알 수 있지만 가장 좋은 방법은 무엇입니까? 더 좋은 방법이 있습니까? 이것은 일반적인 패턴이 될 것 같은데, 그렇지?
버전 번호를 유지하는 것은 널리 받아 들여지고 있습니다. 백 엔드에서 일종의 트랜잭션 데이터베이스를 사용해야합니다. 그렇지 않으면 어쨌든 올바른 동작을 보장 할 수 없습니다. – Pointy
네, PostgreSQL을 사용하고 있습니다. – dlamotte