Django REST framework(DRF)提供了内置路由用于自动生成viewset的API路由,且在性能上有很好的表现。这篇攻略将介绍DRF内置路由的用法,包括常用的API路由类型以及如何使用内置路由来为viewset生成API路由。在本攻略中,我们将使用Django 3.0.4和DRF版本3.11.0。
什么是DRF内置路由
DRF内置路由是指直接在viewset上使用的路由。使用内置路由,就无需手动编写urlpatterns列表,而只需要使用SimpleRouter
或者DefaultRouter
类,DRF会默认生成urlpatterns给我们。这极大地简化了API路由的编写,并且提高了API的性能,尤其是在大型Web应用程序中,其中有许多动态视图和路由。
DRF内置路由的类型
DRF内置路由一共有两种类型:SimpleRouter
和DefaultRouter
。
SimpleRouter
:仅支持基于viewset的视图方法,其路由的URI格式为/<basename>/
。DefaultRouter
:支持基于viewset的视图方法和其他非viewset的API函数,同时扩展了DRF内置路由系统的功能,其路由的URI格式为/<basename>[/pk][/action]
。
使用内置路由为viewset生成API路由
在使用DRF内置路由时,需要使用SimpleRouter
或DefaultRouter
类来构造路由,并将其与viewset对象相关联。然后使用DRF内置路由系统,它可以自动地为viewset对象生成API路由。在此过程中,你应该指定URL前缀和viewset对象作为这个路由器方法的参数。
下面是使用SimpleRouter
和DefaultRouter
生成路由的示例:
1. 使用SimpleRouter生成路由
from rest_framework import routers
from .views import ArticleViewSet
router = routers.SimpleRouter() # 实例化SimpleRouter
router.register(r'articles', ArticleViewSet) # 关联viewset
urlpatterns = router.urls # 赋值给urlpatterns
在上面的示例中,我们先实例化了SimpleRouter
,并将其命名为router
。然后使用router.register()
方法将viewset对象ArticleViewSet
关联到路由器上,并指定了URL前缀为articles
。最后,我们使用router.urls
属性来将路由添加到Django项目的urlpatterns中。
2. 使用DefaultRouter生成路由
from rest_framework import routers
from .views import ArticleViewSet
from .views import Comment
router = routers.DefaultRouter() # 实例化DefaultRouter
router.register(r'articles', ArticleViewSet) # 关联viewset
router.register(r'comments', Comment, basename='comment') # 关联普通view,为相应路由赋予basename 'comment'
urlpatterns = router.urls # 赋值给urlpatterns
在上面的示例中,我们实例化了DefaultRouter
,并将其命名为router
。然后使用router.register()
方法将ArticleViewSet
和Comment
对象注册到路由器中。注意,我们将Comment
视图作为普通的view函数来注册到路由器中,并指定了basename为comment
。这意味着路由仅包含名称为“comment”的部分,并且在该部分的URL中使用'
总结
本攻略提供了DRF内置路由的用法和示例。DRF内置路由是一个非常强大和有效的工具,可以减少开发人员创建API路由的复杂度,提高API的性能。通过使用SimpleRouter
和DefaultRouter
类,我们可以轻松地为viewset编写API路由,并将之集成到Django项目中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django REST framework内置路由用法 - Python技术站