【发布时间】:2018-11-05 04:33:38
【问题描述】:
我在 DRF 中创建了一个 API,它接受带有一些数据的 POST 请求,但有时我觉得相同的请求并行出现,导致数据库中的数据重复。
class Feedback(models.Model):
user = models.ForeignKey(Student)
message = models.CharField(max_length=255)
用户可以多次发送相同的反馈。让我们认为它是一个开放的 API,因此任何人都可以使用它,并且在某人的应用程序中,用户多次单击按钮,我收到了多个请求,但数据应该只保存一次。
我尝试通过将BooleanField 添加到Student 表并使用以下代码来防止它。但是由于多个请求并行出现,它们可以读取相同的值True。
if student.can_submit_feedback:
student.can_submit_feedback = False
student.save()
else:
# Code for saving feedback
student.can_submit_feedback = True
student.save()
我想一次只处理同一端点和同一 IP 上的一个 API 调用。我怎样才能实现它?
更新
我研究并发现我们可以在表或对象上添加锁,但我正在寻找请求级别的预防
【问题讨论】:
-
@dfundako 我进行了很多研究并尝试了多种解决方案,但没有一个适合我,这就是我在这里发布我的问题的原因。
-
也许你也可以在客户端解决,禁用提交按钮直到你的请求结束。
-
@aliva 你是对的,但我们也应该在服务器端处理它,因为 API 可以对任何人开放。
标签: django api django-models django-rest-framework django-views