对于视图集,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。
REST framework提供了两个router
- SimpleRouter
- DefaultRouter
共同点: 可以帮助我们自动生成 详情视图和列表视图的路由
不同点
DefaultRouter: 根路由可以显示,会以超链接的形式显示
SimpleRouter: 根路由不能显示,报404
使用方法:
创建路由对象
# 定义一个路由器对象 router = DefaultRouter()@H_502_34@
注册路由信息
将序列化器的视图进行注册 router.register(r'路由前缀',视图集,basename=命名空间')@H_502_34@
将路由信息保存到urlpatterns中
将注册后的路由信息添加到路由表中
urlpatterns += router.urls
@H_502_34@
为自定义action自动创建路由信息
在视图集中,如果想要让Router自动帮助我们为自定义的动作生成路由信息,需要使用rest_framework.decorators.action
装饰器。
action装饰器可以接收两个参数:
- methods: 声明该action对应的请求方式,列表传递
- detail: 声明该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)@H_502_34@
这样,DRF框架就会使用路由Routers为我们自动的将自定义的action的路由信息也创建出来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。