Получение 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. Можно использовать это
python manage.py makemigrations abcd
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.