首页 > 解决方案 > Django rest api 根视图显示另一个应用程序的链接

问题描述

我创建了一个项目,其中有两个应用程序,app1,app2 都有,

router = routers.DefaultRouter()

在其 url.py 中,它们都作为独立的应用程序,即如果其他应用程序路由器被注释,将显示所有链接的正确默认根 API。但是当启动它们时,我在 app1 中遇到了 app2 api 链接的问题,通过覆盖 app1 的类似链接,这些链接在序列化程序、视图集和模型名称方面是相似的API 默认视图

这是我的项目urls.py文件

from django.urls import path, include

urlpatterns = [
    path('app1/', include('app1.urls'),name='oc_url'),
    path('app2/', include('app2.urls'),name='pc_url'),
    
]

App1 urls.py 是

from app1.views import ActiveUsersViewSet,ProjectsViewSet,TestsExecutedViewSet,TestRunsViewSet,DefectsViewSet,FeaturesViewSet
router = routers.DefaultRouter()
router.register(r'activeusers', ActiveUsersViewSet)
router.register(r'projects', ProjectsViewSet)
router.register(r'testsexecuted', TestsExecutedViewSet)
router.register(r'testruns', TestRunsViewSet)
router.register(r'defects', DefectsViewSet)
router.register(r'features', FeaturesViewSet)

App2 urls.py

from app2.views import ActiveUsersViewSet,ProjectsViewSet,SessionsHistoryViewSet
router = routers.DefaultRouter()
router.register(r'activeusers', ActiveUsersViewSet)
router.register(r'projects', ProjectsViewSet)
router.register(r'sessionshistory', SessionsHistoryViewSet)

问题来自与两个应用程序中具有相同名称的模型相关的 api。是因为我在两个应用程序中都有相同名称的相同型号吗?有什么建议可以解决这个问题吗?

标签: pythondjangodjango-rest-framework

解决方案


经过一番挖掘,看起来问题是相互矛盾url_name的。url_names在您的情况下,您的ActiveUsersViewsets 和s将发生冲突ProjectsViewSet

您可以通过指定base_name. 这将确保您的所有url_names 都是唯一的:

app1/urls.py

from app1.views import ActiveUsersViewSet,ProjectsViewSet,TestsExecutedViewSet,TestRunsViewSet,DefectsViewSet,FeaturesViewSet
router = routers.DefaultRouter()
router.register(r'activeusers', ActiveUsersViewSet, "app1/activeusers")
router.register(r'projects', ProjectsViewSet, "app1/projects")
router.register(r'testsexecuted', TestsExecutedViewSet, "app1/testsexecuted")
router.register(r'testruns', TestRunsViewSet, "app1/testruns")
router.register(r'defects', DefectsViewSet, "app1/defects")
router.register(r'features', FeaturesViewSet, "app1/features")

app2/urls.py

from app2.views import ActiveUsersViewSet,ProjectsViewSet,SessionsHistoryViewSet
router = routers.DefaultRouter()
router.register(r'activeusers', ActiveUsersViewSet, "app2/activeusers")
router.register(r'projects', ProjectsViewSet, "app2/projects")
router.register(r'sessionshistory', SessionsHistoryViewSet, "app2/sessionhistory")

推荐阅读