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

response change on every GET request in django

我正在尝试使用循环技术在 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 请求中我得到最后一个实例,然后按顺序得到其他实例,即第一个实例数据库等等。

您可以改用 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)

这不一定是线程安全的,但除非您需要它,否则这应该足以满足您的要求