drf框架中所有视图及用法
0909自我总结
drf框架中所有视图及用法
一.drf框架中的所有视图类
from django.views import View
from rest_framework import views, generics, mixins, viewsets
最基础:django自带的views类drf框架中最基础的视图类:views.APIViewdrf框架中工具视图:generics- GenericAPIView:该视图类中的基类
mixins视图工具集:
- RetrieveModelMixin:retrieve 单取
- ListModelMixin:list 群取
- CreateModelMixin:create 单增
- UpdateModelMixin:update 单整体改
- UpdateModelMixin: partial_update 单局部改
- DestroyModelMixin:destroy 单删
viewsets视图集
上述视图都是基于django自带的views进行相关方法的分装
二.viewsets视图集
ViewSetMixin:视图集工具 - 重写as_view - 将 请求方式 映射到视图类中的 指定方法
我们在路由中 类名.as_view({'get': 'retrieve', 'delete': 'remove_obj'})
GenericViewSet:与模型类有关的接口视图集 - 可以从mixins那继承功能,也可以自定义功能
ViewSet:与模型类无关或不是标准模型类接口 - 一般都是自定义功能
三.generics中GenericAPIView使用
将 queryset 和 serializer_class 封装成类属性,提供了三个方法
self.get_queryset() :获取所有
self.get_object() :获取根据pk获取单个
self.get_serializer(*args, **kwargs):获取指定
常用的几个参数
- data:用于返序列化传参
- many:获取多个序列化对象
- instance:如果有后面save执行更新方法,没有执行创建方法
- partial:为True可以进行局部字段修改,默认为
False为所有字段修改
使用这些方法的重要前提必须要
querysetserializer_class- 如果我们要使用get_object()必须前端传给我们一个
pk
四.mixins使用
mixins是在generics再进行方法的分装成5个方法
- RetrieveModelMixin:retrieve 单取
- ListModelMixin:list 群取
- CreateModelMixin:create 单增
- UpdateModelMixin:update 单整体改
- UpdateModelMixin: partial_update 单局部改
- DestroyModelMixin:destroy 单删
使用方法都是self.方法名(request,*args,**kwargs)
如单取
首先我们要类进行继承class 类名(mixins.RetrieveModelMixin)
self.retrieve(request,*args,**kwargs)
不过再执行这些操作的时候依然要给与generics视图一样的两个参数,且创建的视图类必须继承其方法的类为父类
五.generics中继承GenericAPIView的子类使用
class BookRetrieveUpdateAPIView(generics.RetrieveUpdateAPIView):
queryset = models.Book.objects.filter(is_delete=False).order_by('-id')
serializer_class = serializers.BookModelSerializer
其实再之前的基础再进行方法的分装
居然有什么方法看源码即可ctrl+左键看源码
六自定制视图
本来get他就只会找类中get方法我们可以对其设置让他找我们对于的名称
路由层
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^v4/books/(?P<pk>.*)/$', views.BookGenericViewSet.as_view({
'delete': 'remove_book'
})),
]
视图层
class BookGenericViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
queryset = models.Book.objects.filter(is_delete=False).order_by('-id')
serializer_class = serializers.BookModelSerializer
def remove_book(self, request, *args, **kwargs):
pk = kwargs.get('pk')
try:
book_obj = models.Book.objects.get(is_delete=False, pk=pk)
book_obj.is_delete = True
book_obj.save()
return APIResponse(0, '删除成功')
except:
return APIResponse(1, '删除失败')
drf框架中所有视图及用法的更多相关文章
- django drf框架中的user验证以及JWT拓展的介绍
登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...
- drf框架中认证与权限工作原理及设置
0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...
- drf框架中jwt认证,以及自定义jwt认证
0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...
- drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...
- DRF框架中的异常处理程序
目录 DRF框架中自定义异常处理 一.自定义异常的原因 二.如何设置处理异常的程序 DRF框架中自定义异常处理 一.自定义异常的原因 在Django和DRF框架中都封装了很多的处理异常的程序,可以处理 ...
- DRF框架中分页功能接口
目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...
- vue 中 命名视图的用法
今天主要记录 vue中命名视图的用法 先奉上官网网址:https://router.vuejs.org/zh/guide/essentials/named-views.html 一般情况下,一个页面 ...
- DRF框架中链表数据通过ModelSerializer深度查询方法汇总
DRF框架中链表数据通过ModelSerializer深度查询方法汇总 一.准备测试和理解准备 创建类 class Test1(models.Model): id = models.IntegerFi ...
- vue框架中props的typescript用法
vue框架中props的typescript用法 在vue中使用typescript时,需要引入vue-property-decorator库来兼容格式. javascript写法 Vue.compo ...
随机推荐
- Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项
场景 Winform中对ZedGraph的RadioGroup进行数据源绑定,即通过代码添加选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- java使用FileSystem上传文件到hadoop分布式文件系统配置
Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://sparkclust ...
- Hive介绍和安装部署
搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装h ...
- soap get/post请求
pom.xml依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactI ...
- 激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 三维重建
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11555100.html 前言:最近项目用到halcon的3d模板匹配,三维重建,相机标定,所以 ...
- spring中集成shiro进行安全管理
shiro是一款轻量级的安全框架,提供认证.授权.加密和会话管理四个基础功能,除此之外也提供了很好的系统集成方案. 下面将它集成到之前的demo中,在之前spring中使用aop配置事务这篇所附代码的 ...
- android studio连接雷电模拟器 【AS 模拟器】
⭐ 我的网站: www.mengyingjie.com ⭐ Android studio 怎么连接安卓模拟器呢,跟着下面的步骤即可 (以雷电模拟器为例,其他模拟器类似) 一.下载模拟器 下载安装完雷电 ...
- SpringCloud之Turbine
[前面的话]书接上文,本文的某些知识依赖我的上一篇SpringCLoud的文章:SpringCloud之Feign,如果没有看过可以先移步去看一下.前文提到了hystrix的应用,以及hystrix的 ...
- redis 获取自增数
近期,有一个项目需要用到数字的自增整数,范围是0-199999,但公司数据库是mongodb.同时装有mysql.redis等存储数据的这些数据库,其中redis是集群模式,mongodb是paa( ...
- Kurskal算法
Kruskal算法是以边为主要关注对象的最小生成树算法,是最小生成树最佳的算法实现. 其时间复杂度为O(ElogE)(E为边的数量),而Prime算法采用邻接矩阵的方法是O(V^2)(V为顶点数量). ...