【发布时间】:2020-10-06 21:18:43
【问题描述】:
我正在用 Django REST API 编写一个 Web 应用程序,其中我有一个接受 POST 请求的端点:
https://website.com/api/receive-data
具有以下主体:
{
'value': 1,
}
还有我的代码:
# models.py
class MyModelA(models.Model):
status = models.BooleanField(default=False)
class MyModelB(models.Model):
value = models.IntegerField()
model_a_pk = models.IntegerField()
# views.py
class ModelBRecordData(APIView):
def post(self, request, format=None):
serialzier = ModelBSerializer(data=request.data)
if serializer.is_valid():
model_b = MyModelB.objects.create(value=value, model_a_pk=serializer.data.get('model_a_pk'))
model_b.save()
model_bs = MyModelB.objects.filter().count()
if model_bs > 100000:
model_a = MyModelA.objects.filter(pk=serializer.data.get('model_a_pk')).first()
model_a.status = True
model_a.save()
这里的问题是我可能同时收到 1000 个端点请求。这将使该应用程序进入竞争状态,因此在 model_a 仍在更新时可能会创建超过 100,000 条记录。
如何在这样的应用中防止出现这种竞争情况?
【问题讨论】:
标签: python django rest django-rest-framework race-condition