Skip to main content
 首页 » 编程设计

python之Django Rest Framework 线程安全吗

2025年04月02日28jackei

我有一个 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)