Django中每个GET请求的响应更改

2024-05-21 04:10:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用循环技术在Django中实现负载平衡,方法是在每个GET调用上获得不同的响应

我的模型:

class Load_Balancing(models.Model):
    instance_name = models.CharField(max_length=100)
    sequence = models.IntegerField()
    algorithm = models.CharField(max_length=100)

我试过:

class Get_Instance(APIView):

    def get(self, request):
        next_instance = Load_Balancing.objects.all().order_by("last_visited")[:1]  # get the oldest one
        next_instance.save()
        data = {}
        for r in ins:
            data["instance_name"] = r.instance_name
        return Response(data)

这里instance_name是随机的URL,我试图使其动态化,以便在每次GET请求中,我都会获得最后一个实例,然后依次获得其他实例,即数据库中的第一个实例,依此类推


Tags: 实例instancenamedatagetmodelsloadlength
1条回答
网友
1楼 · 发布于 2024-05-21 04:10:15

您可以改为使用models.DateTimeField()字段。记录最后一次使用它们的时间,然后获取最旧的:

class Load_Balancing(models.Model):
    ...
    last_visited = models.DateTimeField(auto_now=True)
    ...
class Get_Instance(APIView):
    def get(self, request):
        next_instance = Load_Balancing.objects.all().order_by("last_visited").first()  # get the oldest one
        next_instance.save()  # this will update the last_visited field
        ...

如果要获取所有实例,请执行以下操作:

class Get_Instance(APIView):
    def get(self, request):
        instances = list(Load_Balancing.objects.all().order_by("-last_visited"))
        current_instance = instances[-1]
        current_instance.save()
        data = []
        for instance in instances:
            data.append({
                'instance_name': instance.instance_name,
                'is_current': instance == current_instance
            })
        return Response(data)

这不一定是线程安全的,但除非您需要它,否则这应该足以满足您正在尝试的操作

相关问题 更多 >