详解下SimpleRouter和DefaultRouter的区别
SimpleRouter
SimpleRouter
是 Django REST framework 提供的基本路由器。它会为视图集生成常用的路由,但不会生成 API 根视图和格式后缀的路由。
使用方法
1.导入 SimpleRouter 并创建实例
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
2.注册视图集
router.register(r'books', BookView, basename='book')
3.将生成的路由添加到 urlpatterns
中
from django.urls import path, include
urlpatterns = [
path('', include(router.urls)),
]
4.生成的路由
假设 BookView
是一个视图集,SimpleRouter
会生成如下路由:
^books/$ name: book-list
^books/{pk}/$ name: book-detail
DefaultRouter
DefaultRouter
是 SimpleRouter
的增强版本。它除了生成 SimpleRouter
提供的基本路由外,还会生成 API 根视图和格式后缀的路由。
使用方法
1.导入 DefaultRouter 并创建实例
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
2.注册视图集
router.register(r'books', BookView, basename='book')
3.将生成的路由添加到 urlpatterns
中
from django.urls import path, include
urlpatterns = [
path('', include(router.urls)),
]
4.生成的路由
假设 BookView
是一个视图集,DefaultRouter
会生成如下路由:
^books/$ name: book-list
^books/{pk}/$ name: book-detail
^$ name: api-root
^books\.(?P<format>[a-z0-9]+)/?$ name: book-list
^books/{pk}\.(?P<format>[a-z0-9]+)/?$ name: book-detail
其中,^$ name: api-root
是 API 根视图,它会返回一个包含所有注册视图集链接的响应。
区别
-
API 根视图:
SimpleRouter
不会生成 API 根视图。DefaultRouter
会生成 API 根视图,提供一个包含所有注册视图集链接的超链接响应数据。
-
格式后缀:
SimpleRouter
不会为生成的路由添加格式后缀。DefaultRouter
会为生成的路由添加格式后缀,允许客户端请求特定的响应格式(如 JSON、HTML 等)。