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

通过Django REST Framework框架编程,且存在多个APP应用时,URL该如何设置?这里介绍两种不同的设置方式,一种是同意放到主urls.py文件中;另一种是分别放到各应用的urls.py文件中。

项目目录结构介绍

我的项目工程中包含用户中心(userCenter)、产品中心(prodCenter)、和工具集中心(toolsCenter)这样3个APP应用,如下图所示:

DRF框架下多APP应用时urls设置_第1张图片

第一种:统一放到主urls.py文件中

直接上代码

# aijoke_drfAPP/aijoke_drfAPP/urls.py

from django.contrib import admin
from django.conf.urls import url, include
from rest_framework import routers
# 注意下面三行,分别是3个APP应用的导入
from userCenter import views
from prodCenter import views as pviews
from toolsCenter import views as tviews

router = routers.DefaultRouter()
# 将三个应用的视图(views)向默认router中注册,这样就可以看到各个应用中心的接口链接了
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'product', pviews.ProdViewSet)
router.register(r'tools', tviews.FileViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(router.urls)),    # 该语句可以显示首页(http://127.0.0.1:8000/)

    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),  # 页面会增加login/logout登录选项
]

效果如下:

 DRF框架下多APP应用时urls设置_第2张图片

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

第二种:放到各自APP应用的urls.py文件中

代码如下:

主urls.py

# aijoke_drfAPP/aijoke_drfAPP/urls.py

from django.contrib import admin
from django.conf.urls import url, include
from rest_framework import routers
from prodCenter import views as pviews  # 这里只导入了一个产品中心的工程

router = routers.DefaultRouter()  # 定义默认路由
router.register(r'product', pviews.ProdViewSet)  # 这里只注册了一个产品中心的路由


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(router.urls)),
    url(r'^tools/', include('toolsCenter.urls')),  # 如果地址首先匹配到tools,则引用toolsCenter中的urls文件
    url(r'^users/', include('userCenter.urls')),   # 如果地址首先匹配到tools,则引用userCenter中的urls文件
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

toolsCenter下的urls.py

# /aijoke_drfAPP/toolsCenter/urls.py


#!/usr/bin/env python
# _*_ coding:utf-8 _*_

from django.conf.urls import url,include
from toolsCenter import views
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'', views.FileViewSet)

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

]

userCenter下的urls.py

# /aijoke_drfAPP/userCenter/urls.py

#!/usr/bin/env python
# _*_ coding:utf-8 _*_


from django.conf.urls import url,include
from rest_framework import routers
from userCenter import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)    # 注册用户接口
router.register(r'groups', views.GroupViewSet)  # 注册分组接口

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

]

因为我们的用户中心APP中有2个接口,所以我们需要分别注册users和groups,这样才能控制如何进入用户接口,如何进入分组接口

首页效果如下:

DRF框架下多APP应用时urls设置_第3张图片

因为我们的主urls.py文件中只注册了产品中心,所以这里只能看到产品中心的接口链接地址

那我们想看工具集中心(toolsCenter)的接口怎么办呢,我们需要输入完成的地址(http://127.0.0.1:8000/tools/),工具集中心的接口效果如下:

DRF框架下多APP应用时urls设置_第4张图片

同样的道理,我们想看用户中心的接口,需要输入完整的地址(http://127.0.0.1:8000/users/)用户中心效果如下:

DRF框架下多APP应用时urls设置_第5张图片

 

 

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

其实我个人更喜欢层次清晰一点的第二种方式,但是它的缺点也很明显,如果哪位大神能帮忙解决这个问题,可以直接回复我,本人非常感谢

 

 

你可能感兴趣的:(script-python)