【问题标题】:django rest framework display ViewSet and classic endpoints for all app in api rootdjango rest框架在api root中显示所有应用程序的ViewSet和经典端点
【发布时间】:2017-01-16 23:08:20
【问题描述】:

有没有办法在 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 根目录:

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 文档中所述)。有没有办法做到这一点?

【问题讨论】:

    标签: url django-rest-framework router endpoint


    【解决方案1】:

    不,但您仍然可以使用模型或非模型视图集来代替 APIView。

    from rest_framework import viewsets
    
    class BarListView(viewsets.ViewSetMixin, <what you already had>):
        <your current code>
    

    应该这样做。 请注意,如果是非模型视图,则需要将base_name 添加到路由器的注册中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2018-07-02
    • 2016-05-27
    相关资源
    最近更新 更多