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 ...
随机推荐
- ES6-数组的新方法
1.Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型. Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7)创建一个 ...
- hbase 修复 hbase hbck
hbase hbck 新版本的 hbck 可以修复各种错误,修复选项是: (1)-fix,向下兼容用,被-fixAssignments替代 (2)-fixAssignments,用于修复region ...
- JAVA面试问题与解答(1-15)
Q1.内部类和子类之间有什么区别? Ans:Inner类是嵌套在另一个类中的类.内类具有嵌套它的类的访问权限,并且它可以访问外部类中定义的所有变量和方法. 子类是从另一个名为super class的类 ...
- 安装完oracle11g_2x64位数据库后使用PL Developer链接oracle报错“请确认是否安装了32位oracle和TNS错误”解决方案
解决使用PL Developer登录oracle报错没有配置TNS错误.首先安装好oracle11g数据库,安装PL developer32位 1,下载“instantclient-basic-win ...
- redux的简单使用
Redux 我从学react起,一共写了三次react项目第一次是学生选课系统,完全不知道生命周期的规律和顺序,也不知道axios到底应该放在哪里才能更好的请求到,文件分工不明确,没有体现组件化的优势 ...
- Vue学习之vue中的计算属性和侦听器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python实战练习_贪吃蛇 (pygame的初次使用)
正如标题所写的那样,我将一步步的完成本次实战练习——贪吃蛇.废话不多说,感兴趣的伙伴可以一同挑战一下. 首先说明本次实战中我的配备: 开发环境:python 3.7: 开发工具:pycharm2019 ...
- Scrapy入门操作
一.安装Scrapy: 如果您还未安装,请参考https://www.cnblogs.com/dalyday/p/9277212.html 二.Scrapy基本配置 1.创建Scrapy程序 cd D ...
- 物料导出FreeMaker模板定义
<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?><Wor ...
- 聚类算法之K-means
想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时候上述条件得不到满 ...