Невозможно POST данные с помощью Django REST Framework : Not Found

Я пытаюсь понять, почему Django REST Framework выбрасывает 404 Not Found, когда я размещаю данные с помощью кода ниже, потому что когда я загружаю просматриваемый API с URL, он корректно отображает список объектов с HTML-формой POST data.

Проект Django, обслуживающий API, запускается в контейнере Docker так же, как и клиент, но на отдельном хосте Docker.

Как я могу решить эту проблему?

Server

Журналы консоли

django-1         | Not Found: /api/strategy/target/
django-1         | [26/Sep/2022 14:27:05] "POST /api/strategy/target/ HTTP/1.1" 404 23

project/project/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("api/strategy/", include("strategy.urls")),
]

strategy/urls.py

from django.urls import path, include
from rest_framework import routers
from strategy.api.views import TargetViewSet


router = routers.DefaultRouter()
router.register("target", TargetViewSet, basename="targets-list")

urlpatterns = [
    path('', include(router.urls)),
]

strategy/views.py

from rest_framework import viewsets
from strategy.api.serializers import TargetSerializer
from rest_framework.decorators import permission_classes
from rest_framework.permissions import IsAdminUser


# Create new model
@permission_classes([IsAdminUser])
class TargetViewSet(viewsets.ModelViewSet):
    serializer_class = TargetSerializer
    queryset = Target.objects.all()

Client

res = requests.post("http://1.2.3.4:8001/api/strategy/target/",
                    data=data,
                    headers={'Authorization': 'Bearer {0}'.format(token)}
                    )
router.register("target", TargetViewSet, basename="targets-list")

Определение маршрутизатора правильное, но я думаю, что проблема в базовом имени. Поскольку у вас есть кверисет, определенный в ваших представлениях, вы можете полностью удалить basename. Вам нужно использовать basename, только если вы определяете свою собственную функцию get_queryset.

Попробуйте это и посмотрим, получится ли у вас.

router.register("target", TargetViewSet")
Вернуться на верх