drf框架中所有视图及用法
程序员文章站
2023-11-22 12:54:58
0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 :django自带的views类 :views.APIView :generics GenericAPIView:该视图类中的基类 mixins视图工具集: RetrieveModelMixin:retrieve 单取 Li ......
0909自我总结
drf框架中所有视图及用法
一.drf框架中的所有视图类
from django.views import view
from rest_framework import views, generics, mixins, viewsets
最基础
:django自带的views类drf框架中最基础的视图类
:views.apiview-
drf框架中工具视图
: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):获取指定
常用的几个参数
- many:获取多个序列化对象
- instance:如果有后面save执行更新方法,没有执行创建方法
- partial:为true可以进行局部字段修改,默认为
false
为所有字段修改
使用这些方法的重要前提必须要
queryset
serializer_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, '删除失败')
上一篇: 电商系统中的静态页解决方案
下一篇: python基础编程——类和实例