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

REST framework提供了两个router

1. 使用方法

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

from rest_framework import routersrouter = 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//action方法名/
    ------True 表示路径格式是xxx//action方法名/
    ----- False 表示路径格式是xxx/action方法名/
    举例:
from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
from rest_framework.decorators import actionclass BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):queryset = BookInfo.objects.all()serializer_class = BookInfoSerializer# detail为False 表示路径名格式应该为 books/latest/@action(methods=['get'], detail=False)def latest(self, request):"""返回最新的图书信息"""...# detail为True,表示路径名格式应该为 books/{pk}/read/@action(methods=['put'], detail=True)def read(self, request, pk):"""修改图书的阅读量数据"""...

由路由器自动为此视图集自定义action方法形成的路由会是如下内容:

^books/latest/$    name: book-latest
^books/{pk}/read/$  name: book-read

3. 路由router形成URL的方式

1) SimpleRouter

2)DefaultRouter

DefaultRouter与SimpleRouter的区别是,DefaultRouter会多附带一个默认的API根视图,返回一个包含所有列表视图的超链接响应数据。

Django之restframework中路由Routers相关推荐

  1. Django之restframework的路由Routers

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

  2. 对Django Web开发中路由(ulr)配置 '^static/(?Plt;pathgt;.*)' 的理解

    在Django静态文件管理中,开发过程中需要启用静态文件服务,在settings.py文件的INSTALLED_APPS中,启用静态文件管理模块'django.contrib.staticfiles' ...

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

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

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

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

  5. Django项目test中的mock概述

    Django项目test中的mock概述 本文环境python3.5.2 test中的mock实现 接口示例代码如下: ...# 路由配置('^api/business_application/?$' ...

  6. Django(二) 路由和视图

    路由定义 路由是客户端访问的url路径与视图函数间的一一映射关系.Django中的路由关系在urls.py文件中,基本格式如下: urlpatterns = [url(regex,view, kwar ...

  7. 7. django应用及分布式路由

    Django应用及分布式路由 应用详解 什么应用 应用在django项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 例如网站可以分为 金融.体育.娱乐.政治等, 这些就是应用,说白 ...

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

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

  9. Django(5)-路由配置实例

    Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...

最新文章

  1. Linux系统目录结构,文件类型以及ls、alias命令
  2. VC6.0 控件Radio Button的使用
  3. 3级软件测试试题,软件测试人员(.NET)_3级_操作技能鉴定1.1.3试题单(26页)-原创力文档...
  4. display:inline display:block
  5. Java笔记11-【异常、线程】
  6. 更改 SQL Server 2000 端口号
  7. mysql-优化班学习-8-20170606-MySQL索引
  8. UI设计灵感|如何简易花繁多的数据?功能仪表盘界面设计来看
  9. mysql4函数_MySQL-4.常见函数
  10. leetcode 20. 有效的括号 (python)
  11. Decide what you want,and go after it with everything you got!
  12. 智能硬件设计开发流程
  13. 如何用3D Max进行三维建模
  14. 腾讯信鸽推送(一):服务端架构
  15. 英尺英寸和厘米的换算_英尺米换算(英尺英寸与厘米换算器)
  16. Camera+收入超500万美金,VPlayer能否击败其神话?
  17. VS2017设置透明主题
  18. 普适计算Topic推荐-AMiner
  19. win10无法访问linux共享服务器,Win10无法访问NAS或Linux网络共享的处理方法
  20. 某宝2020最新登录加密算法和滑小鸡算法

热门文章

  1. 脉冲响应不变法C语言程序,脉冲响应不变法-数字信号处理总结.ppt
  2. 乐学习知选择--我的J2EE技术历程
  3. 【TypeError: Descriptors cannot not be created directly. 】解决方法
  4. 完善circos做图
  5. Echart 仪表盘 样式调整
  6. 【科学文献计量】networkx绘制网络图的基本属性,图形读写以及无向/有向图形绘制详解
  7. 神州租车还有这些新玩法?打造了行业新标杆
  8. PHP版本更新功能实现,技术分享:最低PHP版本更新操作 | Wopus
  9. 仿泡团影视网源码 苹果cmsV8版本 电脑端+影视模块
  10. element-plus ui表格表头筛选功能