router

路由Routers
對於視圖集ViewSet,咱們除了能夠本身手動指明請求方式與動做action之間的對應關係外,還能夠使用Routers來幫助咱們快速實現路由信息。url

REST framework提供了兩個routerrest

SimpleRouter
DefaultRoutercode

  1. 使用方法
    1) 建立router對象,並註冊視圖集,例如

from rest_framework import routersrouter

router = routers.SimpleRouter()
router.register(r'books', BookInfoViewSet, base_name='book')
register(prefix, viewset, base_name)對象

prefix 該視圖集的路由前綴
viewset 視圖集
base_name 路由名稱的前綴
如上述代碼會造成的路由以下:路由

^books/$ name: book-list
^books/{pk}/$ name: book-detail
2)添加路由數據get

能夠有兩種方式:io

urlpatterns = [
...
]
urlpatterns += router.urls
class

urlpatterns = [
...
url(r'^', include(router.urls))
]
2. 視圖集中包含附加action的
class BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializertest

@action(methods=['get'], detail=False)
def latest(self, request):
    ...

@action(methods=['put'], detail=True)
def read(self, request, pk):
    ...

此視圖集會造成的路由:

^books/latest/$ name: book-latest
^books/{pk}/read/$ name: book-read
3. 路由router造成URL的方式
1) SimpleRouter

SimpleRouter

2)DefaultRouter

DefaultRouter

DefaultRouter與SimpleRouter的區別是,DefaultRouter會多附帶一個默認的API根視圖,返回一個包含全部列表視圖的超連接響應數據。

相關文章
相關標籤/搜索