标签:get 请求方式 turn model efault 自动 路由表 code router
对于视图集,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。
REST framework提供了两个router
# 定义一个路由器对象 router = DefaultRouter()
# 将序列化器的视图进行注册 router.register(r‘路由前缀‘, 视图集, basename=‘命名空间‘)
urlpatterns中
# 将注册后的路由信息添加到路由表中 urlpatterns += router.urls
当我们定义好Routers后,DRF框架会使用Routers为我们自动创建好路由信息,但是自定义的action并不会自动创建路由信息。
在视图集中,如果想要让Router自动帮助我们为自定义的动作生成路由信息,需要使用rest_framework.decorators.action
装饰器。
action装饰器可以接收两个参数:
xxx/<pk>/action方法名/
xxx/action方法名/
class BookInfoViewSet(ModelViewSet): """增删改查图书信息""" # 指定查询集 queryset = BookInfo.objects.all() # 指定序列化器 serializer_class = BookInfoModelSerializer # detail为False 表示路径名格式应该为 books/latest/,其中不包含pk @action(methods=[‘get‘], detail=False) def latest(self, request): """ 自定义action动作 返回最后一条图书信息 """ book = BookInfo.objects.latest(‘id‘) serializer = self.get_serializer(book) return Response(serializer.data)
这样,DRF框架就会使用路由Routers为我们自动的将自定义的action的路由信息也创建出来。
标签:get 请求方式 turn model efault 自动 路由表 code router
原文地址:https://www.cnblogs.com/chao666/p/12284494.html