【发布时间】:2021-12-30 00:00:57
【问题描述】:
我仍在学习 django,并认为这对某些人来说可能很容易。我正在尝试找出简单设置 API URL 的最佳方法(以便它们都显示在 api 根目录中,并且可以在项目中实际使用 - 在我的例子中是 /api/)。我正在使用 django rest 框架,并且似乎无法设置多个 API - 它仅适用于一个,但在尝试设置另一个时会出现问题。
所以我有一个名为 pages 和 accounts 的应用程序(和 core - 主 urls.py 的默认位置)。我在 pages 应用中创建了另一个 urls.py,在 accounts 应用中创建了另一个。
accounts/urls.py:
from . import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r"accounts", views.AccountsViewSet, basename="accounts")
urlpatterns = router.urls
pages/urls.py:
from . import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r"pages", views.PagesViewSet, basename="pages")
urlpatterns = router.urls
还有核心的urls.py:
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from rest_framework.routers import DefaultRouter
router = routers.DefaultRouter()
urlpatterns = [
path("admin/", admin.site.urls),
path("api/", include("pages.urls")), # works but root only shows pages API
# path("api/", include("pages.urls", "accounts.urls")), # fails with error: “django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.”
# path("api/", include(router.urls)), # no error but root api is empty
]
我会假设,可能是错误的,当访问根目录时,router.urls 应该包含所有 api。仅使用 include("pages.urls”) 时,root api 目前看起来像这样:
{
"pages": "http://localhost:8000/api/pages/"
}
如何让它正确显示所有 api?我能做到的唯一方法是将router.register(r"accounts", views.AccountsViewSet, basename="accounts”) 放在页面 urls.py 中,这是非常不可取的,尤其是随着项目进一步发展。
谢谢
【问题讨论】:
标签: django django-rest-framework django-rest-viewsets