我使用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模型终结点?我没有在文档中找到任何内容。
谢谢。
答案 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)