Получение 404 по определенным адресам в фреймворке django rest

Я пытаюсь получить доступ к урлам, определенным в приложении django (abcd).

apps:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'rest_framework',
    "abcd",
]

urls.py

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

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

abcd.urls

from rest_framework import routers

from abcd import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet, 'users')
router.register(r'groups', views.GroupViewSet, 'groups')
urlpatterns = router.urls

views.py

from rest_framework.viewsets import ViewSet


class UserViewSet(ViewSet):
    pass


class GroupViewSet(ViewSet):
    pass

Всякий раз, когда я пытаюсь получить доступ к: http://localhost:8000/users или http://localhost:8000/groups, я получаю 404.

Вам нужно определить urlpatterns внутри abcd.urls для конечной точки пути /users и /groups должно быть так.

abcd/urls.py

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

from abcd import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet, 'users')
router.register(r'groups', views.GroupViewSet, 'groups')

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

Нужно перенести новый модуль, чтобы сделать его читаемым в django. Можно использовать это

  1. python manage.py makemigrations abcd

  2. python manage.py migrate

Я признаю, что документация действительно вводит в заблуждение [django-rest-framework.org] на эту тему, но вот моя рекомендация:

Если вам не нужен basename, не используйте его.

Измените свой код на этот, и он будет работать:

router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

The DefaultRouter generates routes for a ViewSet according to the available methods on the ViewSet. A ViewSet class does not provide any method handlers such as .get() or .post(), but instead provides actions such as .list() and .create(). See the full mapping here. [django-rest-framework.org]

Поскольку у вашего ViewSet нет методов, запрос get вернет код 404 с текстом состояния -Not Found.

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