gpt4 book ai didi

django - 从多个应用程序设置简单的 Django ViewSet API

转载 作者:行者123 更新时间:2023-12-05 05:50:20 28 4
gpt4 key购买 nike

我仍在学习 Django,我想这对某些人来说可能很容易。我试图找出简单设置 API URL 的最佳方法(以便它们都显示在 api 根目录中,并且可以实际用于项目中——在我的例子中是 /api/).我正在使用 django rest 框架,似乎无法设置多个 API - 它只适用于一个,但在尝试设置另一个时会出现问题。

所以我有一个名为 pagesaccounts 的应用程序(和 core - 主 urls.py 所在的默认值)。我在页面应用程序中创建了另一个 urls.py,在帐户应用程序中创建了另一个。

账户/urls.py:

from . import views
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r"accounts", views.AccountsViewSet, basename="accounts")
urlpatterns = router.urls

页面/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") 时,根 api 目前看起来像这样:

{
"pages": "http://localhost:8000/api/pages/"
}

如何让它正确显示所有 API?我能做到的唯一方法是将 router.register(r"accounts", views.AccountsViewSet, basename="accounts") 放在页面 urls.py 中,这是非常不可取的,尤其是该项目进一步发展。

谢谢

最佳答案

您是否尝试过使用:

    path("api/pages/", include("pages.urls")),
path("api/accounts/", include("accounts.urls")),

在你的 urls.py 中?

可能这意味着您的路线将是:

{
"pages": "http://localhost:8000/api/pages/pages/"
"accounts": "http://localhost:8000/api/accounts/accounts/"
}

在那种情况下你可以尝试使用

router.register("", views.AccountsViewSet, basename="accounts")

accounts/urls.py 中。

同样,

router.register("", views.AccountsViewSet, basename="pages")

pages/urls.py 中。

这样,您可能会获得如下路线:

{
"pages": "http://localhost:8000/api/pages/"
"accounts": "http://localhost:8000/api/accounts/"
}

如果这是你想要的。

关于django - 从多个应用程序设置简单的 Django ViewSet API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70526208/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com