17.ViewSet和Router
导包:from rest_framework import viewsets
#views.py
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework import renderers
class UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
这个视图集会自动提供`list`和 `detail`操作
"""
queryset = User.objects.all()
serializer_class = UserSerializer
我们使用了 ModelViewSet 类来获取完整的默认读写操作。
请注意,我们还使用 @detail_route 装饰器创建一个名为 highlight 的自定义操作。这个
装饰器可用于添加不符合标准 create / update / delete 样式的任何自定义路径。
默认情况下,使用 @detail_route 装饰器的自定义操作将响应 GET 请求。如果我们想要一个
响应 POST 请求的动作,我们可以使用 methods 参数。
默认情况下,自定义操作的URL取决于方法名称本身。如果要更改URL的构造方式,可以为装饰
器设置url_path关键字参数。
class SnippetViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
'''
父类里面没有highlight方法,我们使用action装饰器
detail:是否查看详细
renderers_class:指定使用的解析器
'''
@action(detail=True,renderers_class=[renderers.StaticHTMLRenderer])
def highlight(self, request, *args, **kwargs):
snippet = self.get_object()
return Response(snippet.highlighted)
#urls.py 初级写法
from snippets.views import SnippetViewSet,UserViewSet,api_root
# 字典参数映射,例如使用get方法 就是 对应list操作
snippet_list = SnippetViewSet.as_view({
'get':'list',
'post':'create'
})
snippet_detail = SnippetViewSet.as_view({
'get': 'list',
'put': 'update',
'patch':'partial_update',
'delete':'destroy'
})
urlpatterns = [
path('snippet/',snippet_list),
path('snippets/',snippet_detail)
]
from rest_framework.routers import DefaultRouter
# 实例化DefaultRouter
router = DefaultRouter()
# 通过router注册了两类url,snippets 和 users,而不是两条url
# router可以自动实现根路由
router.register(r'snippets',views.SnippetViewSet)
router.register(r'users',views.UserViewSet)
urlpatterns = [
path('',include(router.urls))
]
- 基于函数的视图 @api_view
- 基于类的视图 APIView GenericView ListModelView
- 基于视图集的视图 ViewSet
17.ViewSet和Router的更多相关文章
- DRF终极封装ViewSet和Router附教程PDF源码
在DRF官方教程的学习过程中,一个很明显的感受是框架在不断地进行封装,我们自己写框架/工具/脚本/平台也可以模仿模仿,先完成底层代码,再做多层封装,让使用者很容易就上手操作.本文是教程的最后一篇,介绍 ...
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...
- Router的创建者——RouteBuilder
Router的创建者--RouteBuilder 在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddl ...
- Rest_framework Router 路由器(含SimplyRouter源码浅解)
目录 Rest_framework Router 路由器 ViewSet结合Router,自动生成url. 将ViewSet注册到Router中,需要三个要素: 关于路由规则,细分有四类: rest_ ...
- The Quantum L3 router and floating IPs
This post shows how the Quantum L3 Agent uses the Linux IP stack to implement the Quantum L3 Routing ...
- Jersey VS Django-Rest
在对Restful服务框架做对比前,主要先说说Restful设计的三大主要元素:以资源为核心的资源方法.资源状态.关系链接超媒体表述. 辅助的有内容协商.安全.版本化设计等. Jersey作为Java ...
- Vue+Django REST framework打造生鲜电商项目
1-1 课程导学 2-1 Pycharm的安装和简单使用 2-2 MySQL和Navicat的安装和使用 2-3 Windows和Linux下安装Python2和Python3 2-4 虚拟环境的安装 ...
- Django序列化&django REST framework
第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...
- django rest framework 小小心得
這篇主要是針對於個人目前學習django rest framework的一些小小心得,在開發django而言,想要撰寫restful api,是有幾個套件可以選擇的 rest framework ta ...
随机推荐
- Luogu1038 神经网络 (拓扑排序)
拓扑排序,裸的,水的. 第一发:题读错,输出错,输入错,到处错 \(\longrightarrow\) 40pts (excuse me ?) 第二发:漏了输入层特判 \(\longrightarro ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据
1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下.而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以 ...
- PHP实现获取本地视频进行随机播放
创建一个文件夹,里面随便方视频文件即可 列如文件夹名字是assets代码如下 <? $handler = opendir('./assets/mp4/');//当前目录中的文件夹下的文件夹 需要 ...
- 如何实现Windows平台RTMP播放器/RTSP播放器播放窗口添加OSD文字叠加
好多开发者在做Windows平台特别是单屏多画面显示时,希望像监控摄像机一样,可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Git ...
- KingbaseES V8R3 由于修改系统时间导致sys_rman备份故障案例
案例说明: 此案例,为复现"current time may be rewound"错误.对于数据库环境,在使用前必须保证系统时间的正确性.如果数据库创建后,再将系统时间修改为 ...
- 【前端】在浏览器控制台,直接发Ajax请求
我们在日常的开发的过程中,经常需要前端测试发送请求测试一些数据.但是由于一些session,cookie的存在,我们无法在postman上创建一些会话.那么这样,我们就可以在浏览器上直接发送Ajax请 ...
- 7、System类
System类 常见方法 exit 退出当前程序 System.out.println("ok1"); //1. exit(0) 表示程序退出 //2. 0 表示一个状态,正常的状 ...
- Java安全之Velocity模版注入
Java安全之Velocity模版注入 Apache Velocity Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象.它允许web 页 ...
- .env[mode]文件中如何添加注释
前言 Vue-Cli 允许我们在项目根目录创建.env.[mode]文件来设置一些打包编译的启动参数,通过执行脚本的时候加mode参数,指定不同环境需要加载的配置文件 形如: .env.prod NO ...
- Elasticsearch:跨集群复制 Cross-cluster replication(CCR)