Django-rest-framework(四)router

在上一节viewsets中,咱们提到了route的方式使用,在这一节,咱们将仔细介绍drf 的router机制。简单来讲,router的做用就是将viewset对象的url映射关系提取出来。python

简单使用

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'users', UserViewSet, basename="user")
router.register(r'accounts', AccountViewSet)
# urlpatterns = router.urls
urlpatterns = [
    url(r'^api/', include((router.urls, 'app_name'))),
]

register 用两个参数,api

  • prefix route中url的前缀
  • viewset 对应的viewset类
  • basename 建立url的名字,默认是viewset的queryset,因此若是viewset类中没用queryset属性,必须设置basename

额外的action

在以前的介绍中,咱们知道, viewset里面咱们能够经过继承不一样的mixins来实现列表,详情,增长,修改,部分修改,删除种不一样功能的接口。但是在实际状况中,咱们须要的不单单是这些,因此,咱们须要额外的url来路由。因而引入了action装饰器,咱们能够在viewset中添加额外的路由了,使用方法:app

from myapp.permissions import IsAdminOrIsSelf
from rest_framework.decorators import action

class UserViewSet(ModelViewSet):
    ...

    @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf])
    def set_password(self, request, pk=None):
Note
在以前旧的版本使用的是detail_route,list_route连个装饰器来添加额外的路由,用来区别url中是否有pk字段。action装饰器则是经过detail字段来区别

使用上面action生成的url是 ^users/{pk}/set_password/$。 若是不想使用方法的名字来作路由,能够在action中指定url_namepost

DefaultRouter

前面咱们介绍时使用的是SimpleRouterDefaultRouter与之不一样的是,它带了一个api root view,返回了包viewset中包含的全部action的超连接。url

官方文档上还介绍了自定义routers的方法,由于暂时还没用到过,因此对这部分不作介绍rest

相关文章
相关标签/搜索