使用 django-rest-framework 我正在使用DefaultRouter
我想为几个应用程序提供 API,所以我的问题是我可以以 django 方式执行此操作,并将我的路由器注册放在每个应用程序 URLconf 中,并让它们显示为一个聚合 api 或理想情况下以命名空间的方式显示。
换句话说,如果app1包含modelA和modelB,而app2包含modelC:
- 我可以声明出现在
mysite/app1/apiand的 2 个路由器mysite/app2/api,或者 - 我可以有一个 api
mysite/api列出所有三个模型,然后在他们自己的应用程序中注册各个模型吗urls.py
就像是
router = DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(include('app1.apis')
router.register(include('app2.apis')
或者,是否有一种简单的方法可以使我的路由器变量在每个应用程序的 URLconf 中可用,以便他们可以调用router.register?我不确定是否
urlpatterns = patterns('',
url(r'^snippets/', include('snippets.urls', namespace="snippets"))
...
url(r'^api/', include(router.urls)),
实际上导致代码在app1/urls.py此时执行,以便它可以router.register以某种方式调用,因此最终的 url 调用包括所有应用程序注册以及项目注册。
更新
使用 Nicolas Cortot 的变体,option 2我可以使用我的特定资源,但它未在atAPI中列为可用资源root APImyserver\api\
我假设以某种方式DefaultRouter创建它自己的页面定义并向其中router.register添加条目。我当前的设置(我认为 Nicholas 的选项 1 也是如此)创建了两个单独的路由器,并且只有一个可以显示为服务器根目录,下面的设置myserver\api\列出users但不是片段。
这是我当前的设置:
项目 urls.py:
router = DefaultRouter()
router.register(r'users', views.UserViewSet)
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include(router.urls)),
url(r'^api/', include('snippets.apiurls')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
)
项目/片段/apiurls.py:
router = DefaultRouter()
router.register(r'snippets', views.SnippetViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
)
如果我将项目中条目的顺序颠倒urls.py为:
url(r'^api/', include('snippets.apiurls')),
url(r'^api/', include(router.urls)),
然后我被snippets列出但没有users
我猜 Django 正在服务于第一个匹配的路由。
除非有人能告诉我,否则我似乎需要一个路由器变量来传递并以某种方式添加。