Django Rest Framework GET запрос возвращает желаемый ответ только при первом запросе

Я использую Django Rest Framework и OpenStack (DevStack развернут на виртуальной машине на моем локальном ПК) для создания API, которые будут запускать методы, предоставляемые OpenStack SDK, и возвращать ответ в формате JSON.

Однако, при получении (GET запрос) списка серверов, созданных на OpenStack Cloud Platform, ответ в первый раз после запуска Django Server является правильным и желаемым, но после первого GET запроса, все отправленные GET запросы возвращают пустой список в качестве ответа.

Следует отметить, что я ничего не менял в коде или в конечной точке (URL), тот же сценарий продолжает повторяться, когда я перезапускаю Django Server, желаемый GET ответ на первый запрос и пустой список для всех GET запросов далее.

У меня нет собственных моделей в models.py.

Первый ответ на GET-запрос:-

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "name": "test_shell",
        "image": "openstack.image.v2.image.Image(id=b6019f25-6f6d-4fd2-9fb8-14d50a07d2c0, properties={'links': [{'rel': 'bookmark', 'href': 'http://192.168.56.101/compute/images/b6019f25-6f6d-4fd2-9fb8-14d50a07d2c0'}]})",
        "flavor": "openstack.compute.v2.flavor.Flavor(vcpus=1, ram=128, disk=1, OS-FLV-EXT-DATA:ephemeral=0, swap=0, original_name=m1.nano, extra_specs={'hw_rng:allowed': 'True'})",
        "networks": null,
        "status": "ACTIVE",
        "power_state": "1"
    },
    {
        "name": "ins_code_4",
        "image": "openstack.image.v2.image.Image(id=b6019f25-6f6d-4fd2-9fb8-14d50a07d2c0, properties={'links': [{'rel': 'bookmark', 'href': 'http://192.168.56.101/compute/images/b6019f25-6f6d-4fd2-9fb8-14d50a07d2c0'}]})",
        "flavor": "openstack.compute.v2.flavor.Flavor(vcpus=1, ram=128, disk=1, OS-FLV-EXT-DATA:ephemeral=0, swap=0, original_name=m1.nano, extra_specs={'hw_rng:allowed': 'True'})",
        "networks": null,
        "status": "SHUTOFF",
        "power_state": "4"
    },
    {
        "name": "ins_code_3",
        "image": "openstack.image.v2.image.Image(id=b6019f25-6f6d-4fd2-9fb8-14d50a07d2c0, properties={'links': [{'rel': 'bookmark', 'href': 'http://192.168.56.101/compute/images/b6019f25-6f6d-4fd2-9fb8-14d50a07d2c0'}]})",
        "flavor": "openstack.compute.v2.flavor.Flavor(vcpus=1, ram=128, disk=1, OS-FLV-EXT-DATA:ephemeral=0, swap=0, original_name=m1.nano, extra_specs={'hw_rng:allowed': 'True'})",
        "networks": null,
        "status": "SHUTOFF",
        "power_state": "4"
    }
]

GET Ответ после первого запроса:-

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[]

Django Code:-

Root settings.py

Root urls.py:-

from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    path('api/', include('api.urls', namespace="api")),
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

App "api" urls.py:-

from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from api import views

app_name = "api"

urlpatterns = [
    path('servers/', views.ServerList.as_view()),
    path('servers/<slug:pk>/', views.ServerDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)

App "api" views.py:-

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from requests import request
from rest_framework.parsers import JSONParser
from api.serializers import ServerSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import generics
import openstack
from openstack import connection
from rest_framework import authentication, permissions
from rest_framework.permissions import IsAuthenticated

openstack.enable_logging(debug=True)
conn=connection.Connection(auth_url='http://192.168.56.101/identity/v3',
                           project_name='admin',username='admin',
                           password='nomoresecret',
                           user_domain_id='default',
                           project_domain_id='default', verify=False)


class ServerList(generics.ListAPIView):
    queryset = conn.compute.servers()
    serializer_class = ServerSerializer
    permission_classes = [permissions.IsAuthenticated]

class ServerDetail(generics.RetrieveAPIView):
    queryset = conn.compute.servers()
    serializer_class = ServerSerializer
    permission_classes = [permissions.IsAuthenticated]

App "api" serializers.py:-

import openstack
from openstack import connection
from requests import Response
from rest_framework import serializers
from rest_framework import status


openstack.enable_logging(debug=True)
conn=connection.Connection(auth_url='http://192.168.56.101/identity/v3',
                           project_name='admin',username='admin',
                           password='nomoresecret',
                           user_domain_id='default',
                           project_domain_id='default', verify=False)


class ServerSerializer(serializers.Serializer):
    instance_id = serializers.CharField(read_only=True)
    name = serializers.CharField(max_length=100)
    image = serializers.CharField(max_length=500)
    fixed_ip = serializers.IPAddressField(read_only=True)
    floating_ip = serializers.IPAddressField(required=False, allow_blank=True)
    flavor = serializers.CharField(max_length=500)
    networks = serializers.CharField(max_length=500)
    key_pair = serializers.CharField(max_length=100, required=False, allow_blank=True)
    status = serializers.CharField(max_length=20, read_only=True)
    power_state = serializers.CharField(max_length=20, read_only=True)
    console_url = serializers.URLField(max_length=100, read_only=True)
        

    def create(self, validated_data):
        serverCreated = conn.compute.create_server(name=validated_data["instance_name"], image_id=validated_data["image_id"], 
                flavor_id=validated_data["flavor_id"], networks=[{"uuid": validated_data["network_id"]}])
        serverWait = conn.compute.wait_for_server(serverCreated)
        print(serverWait.access_ipv4)
        return serverWait

Помогите мне решить эту проблему и не стесняйтесь предлагать изменения, чтобы сделать этот код более эффективным. Заранее спасибо.

Вернуться на верх