restaurant_router = DefaultRouter()
restaurant_router.register(r'rooms', RoomsViewSet)
restaurant_router.register(r'printers', PrintersViewSet)
restaurant_router.register(r'shifts', ShiftsViewSet)
urlpatterns = patterns('',
url(r'^$', api_root),
url(r'^restaurant/$',
RestaurantView.as_view(),
name='api_restaurants_restaurant'),
url(r'^restaurant/', include(restaurant_router.urls)),
)
在api_root
我可以链接到指定路线:
@api_view(('GET',))
def api_root(request, format=None):
return Response({
'restaurant': reverse('api_restaurants_restaurant', request=request, format=format),
})
或者我可以使用DefaultRouter
生成的可浏览API,如文档中所述:
我们正在使用的DefaultRouter类也会自动创建API 我们的root视图,所以我们现在可以删除我们的api_root方法 观点模块。
如果我想混合ViewSet
和普通视图,并在同一个API根目录中显示所有内容,该怎么办? DefaultRouter
仅列出其控制的ViewSet
。
答案 0 :(得分:1)
您只需使用一种方法即可将视图定义为ViewSet。 因此,您可以在路由器中注册它,它将与ViewSets在一个空间中。
答案 1 :(得分:-1)
使用DefaultRouter看起来不是一个简单的方法,你必须建立自己的路由器。如果有任何安慰,DefaultRouter用于生成APIRoot视图的逻辑非常简单,您可以轻松地根据DefaultRouter类推送自己的类似路由器(例如,修改ApiRoot类实现以获取要包含的其他URL,您可以执行此操作方法的数量,例如将它们传递到您的路由器的构造函数中):
答案 2 :(得分:-1)
来自http://www.django-rest-framework.org/api-guide/viewsets/:
ViewSet类只是一种基于类的View,它不提供任何方法处理程序,如.get()或.post(),而是提供诸如.list()和.create()之类的操作。
这意味着我们可以扩展您的ViewSet:
def other_rooms_view(request):
return Response(...)
class RoomsViewSet(ViewSet):
...
def list(self, request):
return other_rooms_view(request)
restaurant_router = DefaultRouter()
restaurant_router.register(r'rooms', RoomsViewSet)