Невозможно 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")