Маршрут Django REST Framework не отображается в списке API

Я столкнулся с проблемой в Django REST Framework, где определенный маршрут не отображается в списке API, когда я обращаюсь к https://myserver.com/api/. Вот моя настройка:

url.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter()
router.register(r'myapi', views.myapiViewSet, basename='myapi')

urlpatterns = [
    path('api/', include(router.urls)),
    # Other URL patterns
]

views.py

class myapiViewSet(ViewSet):
    permission_classes = (MaintenanceCheck,)
    throttle_classes = [UserRateThrottle]

Когда я посещаю https://myserver.com/api/, я ожидаю увидеть конечную точку myapi, но она не появляется, и когда я могу обратиться к https://myserver.com/api/myapi/ напрямую, она не работает и показывает мне "Not Found\n The requested resource was not found on this server."

  • Маршрутизатор правильно включен в основной URL conf.
  • Представление myapi является правильным набором представлений.
  • Префикс URL api/ используется правильно.

Я не могу понять, почему конечная точка myapi не отображается в списке API. Любые соображения или предложения будут очень признательны!

Viewset

Ваш набор представлений не раскрывает никаких представлений, поэтому вы получаете 404 Not Found при обращении к url.

Предложите действие, переопределив конечную точку по умолчанию или добавив собственный обработчик пути с помощью @action

from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet


class myapiViewSet(ViewSet):
    # ...

    def list(self, request):
        return Response("/ root path endpoint")

    @action(detail=False, methods=['GET'])
    def custom(self, request, *args, **kwargs):
        return Response("custom/ endpoint")

Или используйте что-то вроде ModelViewSet, и DRF сгенерирует конечную точку для вас.

Документы: https://www.django-rest-framework.org/api-guide/viewsets/#viewset-actions

Маршрутизация

Ваш маршрутизатор выставлен правильно, однако если вы хотите получить доступ к набору просмотров напрямую по пути api/, оставьте путь регистрации пустым:

router = DefaultRouter()
router.register('', views.myapiViewSet, basename='myapi')
Вернуться на верх