| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> DRF-视图集ModelViewSet和自定义路由 -> 正文阅读 |
|
[Python知识库]DRF-视图集ModelViewSet和自定义路由 |
一、ModelViewSet继承的是GenericViewSet,和五个拓展类,所以它的写法如下:
?路由匹配: url(r'^book_drf/$', modelviewset_view.Books.as_view({'get': 'list', 'post': 'create'})), url(r'^book_drf/(?P<pk>\d+)/$', modelviewset_view.Books.as_view({'put': 'update', 'get': 'retrieve', 'delete': 'destroy'})),
路由匹配的实际方法,从books看是没有,但是点进去看ModelViewSet看是从这继承的 ?进入ListModelMixin里可以看到,这个类里面有个list方法,其他增删改查同理。 二、对拓展类里的名称,自定义路由, 自定义的路由使用的前提,这个类视图是视图集,如果不是视图集是不能用的。 1、首先引入这个类 from rest_framework.routers import SimpleRouter,?DefaultRouter 还有一个DefaultRouter ,有根目录首页匹配功能,如果访问的是http://127.0.0.1可以匹配,如果是SimpleRouter 访问http://127.0.0.1/ 必须加上/,可以从源码上看出,DefaultRouter继承了SimpleRouter。点SimpleRouter的源码可以看下,它已经封装好了方法,做一一映射。 然后初始化生成路由对象 router = SimpleRouter() router对象下面有个registry方法,用于生成路由对象 第一个参数是资源名字,第二个参数是哪个视图文件下的那个类视图,第三个参数是路由命名 router.registry('book_drf', modelviewset_view.Books, base_name='books') 生成后的路由信息,可以通过一个打印方法看下 print(router.urls) 最后是把这个列表加到一起 urlpatterns +=router.urls
三、如果想要对自定义命名的方法,自动生成路由,这个时候使用@action装饰器
?四、self.action self.action,可以看出请求的是谁,根据不同的请求返回不同的序列化器。这种场景使用概率比较小
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 20:47:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |