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, '刪除失敗')