javascript – 有没有一种正确的方法可以确保一次只有一个用户使用REST HTTP更改对象?

我已经创建了一个Django / Tastypie应用程序,其中多个人可能在同一时间更改数据库中行的属性,或者可能是过时的PUT数据.

例如:

# 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的名称或描述.他们可以同时进行,或者有人可以将应用程序打开很长时间然后再回来更改它.

我试图避免的是潜在的变化,这是不正确的.鉴于以下情况:

#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行之后,Thing#1的状态应为name =“some other name”,description =“something”而不是name =“some other name”,description =“my description”.

假设应用程序不知道(实时或通过定期更新页面上的数据)提前服务器上的对象发生了变化,如何防止这种情况?

我考虑添加一个字段sequence = models.PositiveIntegerField(),每次更新时我都会增加它,所以我可以判断对象是否在更新发生时过期,但这是最好的方法吗?有没有更好的办法?这似乎是一种常见的模式,对吧?

解决方法

RESTful方法是让客户端跟踪Last-Modified标头或随资源返回的Etag标头.然后,当它POST时,添加一个标题

If-Unmodified-Since: <date-noted-from-initial-GET>

要么

If-Match: <etag-noted-from-initial-GET>

如果自客户端最初下载资源以来已在服务器上修改了资源,则服务器应返回“Precondition Failed”响应.然后,客户端可以检索当前版本并向用户显示合理的内容.

但是,让tastypie响应这些标题可能会有点困难.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)