7.9.9路由Routers

可以使用Routers来帮助我们快速实现路由信息

REST framework提供了两个router

  • SimpleRouter
  • DefaultRouter

(1)使用方法

1) 创建router对象,并注册视图集,例如

from rest_framework import routers router = routers.SimpleRouter() router.register(r'books', BookInfoViewSet, base_name='book')

register(prefix, viewset, base_name)

  • prefix 该视图集的路由前缀
  • viewset 视图集
  • base_name 路由名称的前缀

如上述代码会形成的路由如下:

^books/$ name: book-list

^books/{pk}/$ name: book-detail

2)添加路由数据

可以有两种方式:

urlpatterns = [ ... ] urlpatterns += router.urls

urlpatterns = [ ... url(r'^', include(router.urls)) ]

(2)视图集中附加action的声明

在视图集中,如果想要让Router自动帮助我们为自定义的动作生成路由信息,需要使用rest_framework.decorators.action装饰器。

以action装饰器装饰的方法名会作为action动作名,与list、retrieve等同。

action装饰器可以接收两个参数:

  • methods: 声明该action对应的请求方式,列表传递
  • detail: 声明该action的路径是否与单一资源对应,及是否是xxx/<pk>/action方法名/
    • True 表示路径格式是xxx/<pk>/action方法名/
    • False 表示路径格式是xxx/action方法名/

1)需求

使用DefaultRoute定义路由

2)实现

①视图

在视图集中附加action的声明

# detail为False 表示路径名格式应该为 books/latest/@action(methods=['get'], detail=False)def latest(self, request):"""追加action:返回书籍倒序后的第0个的图书信息GET /books/latest"""book = BookInfo.objects.latest('id')serializer = self.get_serializer(book)return Response(serializer.data)# detail为True,表示路径名格式应该为 books/{pk}/read/@action(methods=['put'], detail=True)def read(self, request, pk):"""追加action:修改图书的阅读量数据PUT /books/<pk>/read"""book = self.get_object()book.bread = request.data.get('read')book.save()serializer = self.get_serializer(book)return Response(serializer.data)

②路由

# 创建路由对象

router = DefaultRouter()

# 将视图注册到路由

router.register(r'books', views.BookInfoViewSet,base_name='books')

# 视图集路由添加到urlpatterns

urlpatterns += router.urls

7.9.9路由Routers相关推荐

  1. python Django Rest_Framework框架 视图集与路由Routers详解(图文并茂版)

    视图集与路由Routers详解 视图集 ViewSet视图集 代码实现 GenericViewSet视图集 代码实现 ModelViewSet视图集 ReadOnlyModelViewSet视图集 路 ...

  2. DRF路由Routers

    路由Routers 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供 ...

  3. DRF 框架总结 - 视图集路由 Routers

    视图集 ViewSet 使用视图集 ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update( ...

  4. RESTful之路由Routers

    对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供了两个router ...

  5. vue路由 routers的写法:require用与不用

    vue路由的写法有很多种,这里我只说routers的写法,一种是compcomponent后面直接写路径,另一种是用require的方式,来看代码 import Vue from 'vue' impo ...

  6. Django之restframework的路由Routers

    对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供了两个router ...

  7. Django之restframework中路由Routers

    对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供了两个router ...

  8. Django REST framework(十)路由集routers的使用

    Django REST framework(九)-视图集ViewSet.GenericViewSet.ModelViewSet.ReadOnlyModelViewSet_simpleyako的博客-C ...

  9. 单域名多php,php多域名单站点路由

    能够使多域名但是只有一个站点的小站,通过路由访问到各个指定目录 <?php //域名跳转路由 //默认跳转 $default = "http://www.stanwind.com/in ...

最新文章

  1. BZOJ3526[Poi2014]Card——线段树合并
  2. 径向基函数插值(3)二维数据的插值
  3. 考研数学早年真题整理20题(很有可能重考!!)
  4. Python基础(一)简介与安装
  5. SAP Commerce Cloud 的本地开发
  6. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
  7. 装箱问题(信息学奥赛一本通-T1295)
  8. 《剑指Offer》 调整数组顺序使奇数位于偶数前面
  9. python类2继承-抽象-多态
  10. python按某列拆分excel表格_python带格式拆分excel表单,copy库完美搞定
  11. LeetCode刷题(32)
  12. Mac 原生词典扩展词库
  13. 论项目管理中的需求管理
  14. Hexo+Icarus3+live2d给博客添加看板娘
  15. 深圳高中女生街头版someone like you
  16. antd ellipsis
  17. 阿里云aliyun 的SLB 对 ECS的健康检查
  18. 搜索引擎的设计与实现
  19. React是什么,为什么要使用它?
  20. H5页面实现下载文件兼容移动端

热门文章

  1. 有一台服务器可以做哪些很酷的事情
  2. 微信小程序利用腾讯云IM发送语音 + 图片
  3. 全息投影助力餐厅,满足全新市场需求
  4. 【软件建模与UML】(持续更新)
  5. 生活随笔:人心难测,伤心地离开
  6. 【大数据入门核心技术-Spark】(二)Spark核心模块
  7. 鸭鸭来袭--官方下载
  8. navicat premium 15 下载安装详细教程
  9. C# 获取汉字的拼音首字母(转)
  10. 百度、华为、京东、B站最新面试题汇集,含泪整理面经