python - Django rest api 根视图显示另一个应用程序的链接
问题描述
我创建了一个项目,其中有两个应用程序,app1,app2 都有,
router = routers.DefaultRouter()
在其 url.py 中,它们都作为独立的应用程序,即如果其他应用程序路由器被注释,将显示所有链接的正确默认根 API。但是当启动它们时,我在 app1 中遇到了 app2 api 链接的问题,通过覆盖 app1 的类似链接,这些链接在序列化程序、视图集和模型名称方面是相似的
这是我的项目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。是因为我在两个应用程序中都有相同名称的相同型号吗?有什么建议可以解决这个问题吗?
解决方案
经过一番挖掘,看起来问题是相互矛盾url_name
的。url_names
在您的情况下,您的ActiveUsersViewset
s 和s将发生冲突ProjectsViewSet
。
您可以通过指定base_name
. 这将确保您的所有url_name
s 都是唯一的:
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")
推荐阅读
- python - 如何重写哪个类有很多@property的python代码?
- database - “表或视图不存在”在 Oracle DB 中出现
- typescript - How can I make child_process.spawn return a Promise in my TypeScript module?
- c# - LINQ:从传入的 IEnumerable 获取具有匹配字符串属性的所有对象
以高效的方式 - excel - 使用不同工作表中的 SUMIFS 时出错
- python-3.x - 从numpy数组行中制作python对象的最快方法
- codeigniter - 为什么 CI 加载表库返回错误 500 目前无法处理此请求?
- android - 如何在android studio中获得两个十进制值之间的总和
- c# - 将 Simple Injector 与可选的 ASP.NET Core Web API 集成
- angular - 延迟加载功能模块,在reducer初始化之前触发ngrx动作