from django.conf.urls import include
from rest_framework.routers import SimpleRouter
router = SimpleRouter() # SimpleRouter類內部做了{請求:函數}的映射關係
# 所有路由與ViewSet視圖類的都可以註冊,會產生 '^v6/books/$' 和 '^v6/books/(?P<pk>[^/.]+)/$'
router.register('v6/books', views.BookModelViewSet)
urlpatterns = [
# 第一種添加子列表方式
url(r'^', include(router.urls)),
]
# 第二種添加子列表方式
# urlpatterns.extend(router.urls)
SimpleRouter 源碼:
class SimpleRouter(BaseRouter):
# 沒有 pk 時做的映射關係
routes = [
# List route.
Route(
url=r'^{prefix}{trailing_slash}$', # 沒有pk
# 映射關係
mapping={
'get': 'list',
'post': 'create'
},
name='{basename}-list',
detail=False,
initkwargs={'suffix': 'List'}
),
# 有 pk 時做的映射關係
Route(
url=r'^{prefix}/{lookup}{trailing_slash}$', # 有pk
# 映射關係
mapping={
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
},
name='{basename}-detail',
detail=True,
initkwargs={'suffix': 'Instance'}
),