DRF框架下多APP应用时urls设置

问题描述

DRF框架下多APP应用时urls设置_龙哥哥的博客-CSDN博客

统一放到主urls.py文件中

  • 优点:
  1. 方便简单;
  2. 页面Api Root下能看到所有应用的链接地址;
  • 缺点:
  1. 结构层次不太清晰;
  2. 修改不注意时容易修改错,导致其它应用路由出现问题;

放到各自APP应用的urls.py文件中

  • 优点:
  1. 结构层次更清晰;
  2. 修改代码几乎互相不受影响,不怕修改错导致其它工程无法找到路由;
  • 缺点:
    无法看到所有接口链接地址,需要自己知道完整的路径才能进入到各自应用的接口。

改进方案(实现目标)

在首页可以看到所有API的入口,同时保持后端子APP的入口独立清晰不互相干扰。

实现方法

Or even simpler you can just import your router for a particular app from app1.urls import router as app1router and then register this router with your default router in the main urls.py file router.registry.extend(app1router.registry) and then you don’t have to subclass anything.

来源:Django REST Framework combining routers from different apps - Stack Overflow

解释

我们只需要在主工程的urls.py中添加如下代码:

from rest_framework.routers import DefaultRouter

from a_app.urls import router as a_router
from b_app.urls import router as b_router
from c_app.urls import router as c_router

router = DefaultRouter()
router.registry.extend(a_router.registry)
router.registry.extend(b_router.registry)
router.registry.extend(c_router.registry)


urlpatterns = [
    url(r'', include(router.urls)),
	……
    url(r'^api/a/', include('a.urls')),
    url(r'^api/b/', include('b.urls')),
    url(r'^api/c/', include('c.urls')),

	……
]

然后各个子app中的url如下所示:

router.register(r'some',SomeViewSet, base_name='somes')

urlpatterns = [
	url(r'^', include(router.urls)),
]

效果

完整api
单独应用的API

  • 注意事项
    本文档只是说明实现原理,url路径设计和api命名不规范问题是前人设计的问题,不在本次讨论范围内。
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页

打赏

西风不瘦

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值