我有一个 Django Rest API 来返回一个值。
这个API可能会同时命中/
django rest api线程安全吗?
$http.get('//0.0.0.0:8000/api/tempName?format=json')
.success(function (data) {
$scope.iterativeNum = data.iterativeField
})
在 views.py 中
class ApiDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Api.objects.all()
serializer_class = ApiSerializer
def get(self, request, *args, **kwargs):
currentForm = self.kwargs['pk']
currentApi = Api.objects.get(pk = currentItem)
currentApi.currentNumber += 1
tempCurrentNum = currentApi.currentNumber
strCurrentNum = str(tempCurrentNum)
currentNumLength = len(strCurrentNum)
if(currentNumLength > currentApi.maxNumberOfDigitsInNum):
currentApi.currentNumber = 1
currentApi.iterativeField = currentApi.fieldPrefix + str(currentApi.currentNumber)
currentApi.save()
return self.retrieve(request, *args, **kwargs)
我担心两个单独的调用会触发“ApiDetail” View 并返回之前相同的数字。
我正在使用 Python/Django 在 Mac 上工作。 Django 1.9.4,Django Rest 3.3.3。
请您参考如下方法:
您可以将所有内容包装到 transaction with transaction.atomic() 中
def get(self, request, *args, **kwargs):
with transaction.atomic()
currentApi = Api.objects.get(pk=currentItem)
...
currentApi.save()
return self.retrieve(request, *args, **kwargs)
