from django.views import View
前端
from rest_framework import views, generics, mixins, viewsets
python
最基础
:django自带的views类django
drf框架中最基础的视图类
:views.APIViewapi
drf框架中工具视图
:generics
viewsets视图集框架
上述视图都是基于django自带的views进行相关方法的分装
iview
ViewSetMixin:视图集工具 - 重写as_view - 将 请求方式 映射到视图类中的 指定方法 咱们在路由中 类名.as_view({'get': 'retrieve', 'delete': 'remove_obj'}) GenericViewSet:与模型类有关的接口视图集 - 能够从mixins那继承功能,也能够自定义功能 ViewSet:与模型类无关或不是标准模型类接口 - 通常都是自定义功能
将 queryset 和 serializer_class 封装成类属性,提供了三个方法工具
self.get_queryset() :获取全部url
self.get_object() :获取根据pk获取单个rest
self.get_serializer(*args, **kwargs):获取指定code
经常使用的几个参数
False
为全部字段修改使用这些方法的重要前提必需要
queryset
serializer_class
pk
mixins是在generics再进行方法的分装成5个方法
使用方法都是self.方法名(request,*args,**kwargs)
如单取
首先咱们要类进行继承class 类名(mixins.RetrieveModelMixin)
self.retrieve(request,*args,**kwargs)
不过再执行这些操做的时候依然要给与generics视图同样的两个参数,且建立的视图类必须继承其方法的类为父类
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, '删除失败')