django rest framework 显示 api root 中所有应用程序的 ViewSet 和经典端点
django rest framework display ViewSet and classic endpoints for all app in api root
有没有办法在 api 根中同时显示 ViewSet 端点(由路由器生成)和经典端点(在每个应用程序的 urls.py 中定义)?
app1 url.py:
router = DefaultRouter()
router.register(r'^foo', views.FooViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url('bar/', views.BarListView.as_view(), name='bar-list'),
url('baz/', views.BazListView.as_view(), name='baz-list'),
]
app2 url.py:
router = DefaultRouter()
router.register(r'^qux', views.QuxFooViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url('quux/', views.QuuxListView.as_view(), name='quux-list'),
url('corge/', views.CorgeListView.as_view(), name='corge-list'),
]
全球url.py:
urlpatterns = [
url(r'^', include('app1.urls')),
url(r'^', include('app2.urls')),
]
API-root:
HTTP 200 OK
Allow: GET, OPTIONS
Content-Type: application/json
Vary: Accept
{
"foo": "http://localhost:8000/foo/",
"bar": "http://localhost:8000/bar/"
"baz": "http://localhost:8000/baz/"
"qux": "http://localhost:8000/qux/"
"quux": "http://localhost:8000/quux/"
"corge": "http://localhost:8000/corge/"
}
这是我想要得到的结果。但目前我只能显示路由器网址或经典网址,但不能同时显示两者。当我尝试显示多个路由器时,它只显示第一个(如 django 文档中所述)。有办法吗?
否,但您仍然可以使用模型或非模型视图集来代替 APIView。
from rest_framework import viewsets
class BarListView(viewsets.ViewSetMixin, <what you already had>):
<your current code>
应该就可以了。
请注意,如果它是非模型视图,则需要将 base_name
添加到路由器的注册中。
有没有办法在 api 根中同时显示 ViewSet 端点(由路由器生成)和经典端点(在每个应用程序的 urls.py 中定义)?
app1 url.py:
router = DefaultRouter()
router.register(r'^foo', views.FooViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url('bar/', views.BarListView.as_view(), name='bar-list'),
url('baz/', views.BazListView.as_view(), name='baz-list'),
]
app2 url.py:
router = DefaultRouter()
router.register(r'^qux', views.QuxFooViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url('quux/', views.QuuxListView.as_view(), name='quux-list'),
url('corge/', views.CorgeListView.as_view(), name='corge-list'),
]
全球url.py:
urlpatterns = [
url(r'^', include('app1.urls')),
url(r'^', include('app2.urls')),
]
API-root:
HTTP 200 OK
Allow: GET, OPTIONS
Content-Type: application/json
Vary: Accept
{
"foo": "http://localhost:8000/foo/",
"bar": "http://localhost:8000/bar/"
"baz": "http://localhost:8000/baz/"
"qux": "http://localhost:8000/qux/"
"quux": "http://localhost:8000/quux/"
"corge": "http://localhost:8000/corge/"
}
这是我想要得到的结果。但目前我只能显示路由器网址或经典网址,但不能同时显示两者。当我尝试显示多个路由器时,它只显示第一个(如 django 文档中所述)。有办法吗?
否,但您仍然可以使用模型或非模型视图集来代替 APIView。
from rest_framework import viewsets
class BarListView(viewsets.ViewSetMixin, <what you already had>):
<your current code>
应该就可以了。
请注意,如果它是非模型视图,则需要将 base_name
添加到路由器的注册中。