7.9.9路由Routers
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相关推荐
- python Django Rest_Framework框架 视图集与路由Routers详解(图文并茂版)
视图集与路由Routers详解 视图集 ViewSet视图集 代码实现 GenericViewSet视图集 代码实现 ModelViewSet视图集 ReadOnlyModelViewSet视图集 路 ...
- DRF路由Routers
路由Routers 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供 ...
- DRF 框架总结 - 视图集路由 Routers
视图集 ViewSet 使用视图集 ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update( ...
- RESTful之路由Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供了两个router ...
- vue路由 routers的写法:require用与不用
vue路由的写法有很多种,这里我只说routers的写法,一种是compcomponent后面直接写路径,另一种是用require的方式,来看代码 import Vue from 'vue' impo ...
- Django之restframework的路由Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供了两个router ...
- Django之restframework中路由Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供了两个router ...
- Django REST framework(十)路由集routers的使用
Django REST framework(九)-视图集ViewSet.GenericViewSet.ModelViewSet.ReadOnlyModelViewSet_simpleyako的博客-C ...
- 单域名多php,php多域名单站点路由
能够使多域名但是只有一个站点的小站,通过路由访问到各个指定目录 <?php //域名跳转路由 //默认跳转 $default = "http://www.stanwind.com/in ...
最新文章
- BZOJ3526[Poi2014]Card——线段树合并
- 径向基函数插值(3)二维数据的插值
- 考研数学早年真题整理20题(很有可能重考!!)
- Python基础(一)简介与安装
- SAP Commerce Cloud 的本地开发
- 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
- 装箱问题(信息学奥赛一本通-T1295)
- 《剑指Offer》 调整数组顺序使奇数位于偶数前面
- python类2继承-抽象-多态
- python按某列拆分excel表格_python带格式拆分excel表单,copy库完美搞定
- LeetCode刷题(32)
- Mac 原生词典扩展词库
- 论项目管理中的需求管理
- Hexo+Icarus3+live2d给博客添加看板娘
- 深圳高中女生街头版someone like you
- antd ellipsis
- 阿里云aliyun 的SLB 对 ECS的健康检查
- 搜索引擎的设计与实现
- React是什么,为什么要使用它?
- H5页面实现下载文件兼容移动端