如何结合DjangoRestFramework路由器用于不同的应用程序

时间:2018-10-23 16:06:10

标签: django django-rest-framework

我使用Django 2.1和DRF,并计划了一个具有许多插入式应用程序的更大的应用程序。我想为DRF提供一个/api URL作为端点,但是允许每个应用在REST端点上公开一个特殊的模型,例如:

在主urls.py中:

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

urlpatterns = [
    # ...
    path('api/', include(router.urls)),
    # ...
]

foo_app/urls.py中的

router = routers.DefaultRouter()
router.register(r'foomodel', FooModelViewSet)

现在,/api/foomodel产生一个404错误。导入foo_model / urls.py(在Django开头打印一个打印语句),其他所有foo_model.urlpattern[path...]都可以识别并正常工作。

如何为中央api REST终结点定义自定义api模型终结点?我没有在文档中找到任何内容。

谢谢。

2 个答案:

答案 0 :(得分:1)

在您的主要urls.py中,您将执行以下操作。 (这是针对Django 1.8的)

urlpatterns += patterns('',
url(r'^api/', include(patterns('',
    url(r'^foo_app/', include('foo_app.urls')),
    url(r'^bar_app/', include('bar_app.urls')),
    url(r'^test_app/', include('test_app.urls')),
)))

这允许您以这种方式访问​​所有端点

localhost:8000/api/foo_app/<foo_app_endpoint>
localhost:8000/api/bar_app/<bar_app_endpoint>
localhost:8000/api/bar_app/<test_app_endpoint>

答案 1 :(得分:0)

我只是通过扩展路由器注册表来实现的。

urls.py

from ad.urls import router as ad_router

main_router = routers.DefaultRouter()
main_router.registry.extend(ad_router.registry)

ad.urls.py

from .api.urls import router as api_router

router = routers.DefaultRouter()
router.registry.extend(api_router.registry)

ad.api.urls.py

router = routers.DefaultRouter()
router.register(r'ad', AdViewSet)