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 ...
随机推荐
- [护网杯 2018]easy_tornado-1|SSTI注入
1.打开之后给出了三个连接,分别查看下三个连接内得信息,结果如下: 2.url中参数包含一个文件名与一串应该是md5得加密的字符串,文件名已经获得了,就需要获取加密得字符串,但是加密字符串时需要使用到 ...
- Luogu3090 [USACO13NOV]空荡荡的摊位Empty Stalls (动态规划)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- 创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1
8 月 9 日下午,2022 中关村国际前沿科技创新大赛"中关村银行杯"大数据与云计算领域决赛在北京市门头沟区中关村(京西)人工智能科技园·智能文创园落下了帷幕.SphereEx ...
- Redis常用指令之string、list、set、zset、hash
Redis之五大类型常用指令 redis的一些小知识 redis服务器端口默认是6379 在编译完成后的bin目录下启动服务端:redis-server 客户端连接操作:redis-cli -h lo ...
- DTSE Tech Talk丨第3期:解密数据隔离方案,让SaaS应用开发更轻松
摘要:解读云上前沿技术,畅聊开发应用实践.专家团队授课,答疑解惑,助力开发者使用华为云开放能力进行应用构建.技术创新. 围绕当下许多企业青睐的SaaS应用开发,华为云DTSE技术布道师李良龙为大家带来 ...
- iOS去广告最简单方案!+以图搜漫
iOS去广告 ️推荐 | 通过下载.安装.启用(一般默认启用)描述文件,即可实现通过私人dns来达到全系统的广告拦截.隐私保护功能 ️注意: 限 iOS 14 及以上版本系统使用 复制链接需在 saf ...
- 《HelloGitHub》第 77 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- npm 和 maven 使用 Nexus3 私服 | 前后端一起学
前文<Docker 搭建 Nexus3 私服 >介绍了在 docker 环境下安装 nexus3 以及 nexus3 的基本操作和管理,本文分别介绍 npm(前端)和 maven(后端)如 ...
- SUSE Linux Enterprise Server 12 使用二进制文件安装docker
Docker-CE in SUSE 虽然使用zypper添加源也能安装,不过我在SLES 12sp5 上安装时发现好多命令还需要自己手动软连接,干脆网上找了找文档,再自己小改下,用二进制部署,也是可以 ...
- luogu P2882 [USACO07MAR]Face The Right Way G
题目描述 Farmer John has arranged his N (1 ≤ N ≤ 5,000) cows in a row and many of them are facing forwar ...