1.视图额外动作
目的:扩展视图集功能,添加额外动作
操作流程
1,路由
from django.contrib import admin from django.urls import path, include from . import views urlpatterns = [ path('book/', views.BookModelViewSet.as_view({'get': 'list', 'post': 'create'})), path('book/<int:pk>', views.BookModelViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})), path('book/bread', views.BookModelViewSet.as_view({'get': 'bread_book'})), ]
2,视图
from django.shortcuts import render from rest_framework.viewsets import ModelViewSet from .models import * from .serializers import BookInfoModelSerializer from rest_framework.response import Response #视图集 class BookModelViewSet(ModelViewSet): queryset = BookInfo.objects.all() serializer_class = BookInfoModelSerializer #获取阅读量大于20的 def bread_book(self,request): #获取指定书籍 books=BookInfo.objects.filter(bread__gt=100) #创建序列化器对象 serializer=self.serializer_class(instance=books,many=True) #返回数据 return Response(serializer.data)
视图集额外动作,partial
1,路由
from django.contrib import admin from django.urls import path, include from . import views urlpatterns = [ ...... path('book/update_book_bread/<int:pk>', views.BookModelViewSet.as_view({'put': 'update_book_bread'})), ]
视图
class BookModelViewSet(ModelViewSet): queryset = BookInfo.objects.all() serializer_class = BookInfoModelSerializer ...... def update_book_bread(self,request,pk): book = self.get_object() #拿到一调数据 data = request.data #获取页面数据 serializer = self.get_serializer(instance=book,data=data,partial = True) #partial同意修改单个 serializer.is_valid(raise_exception=True) #校验 serializer.save() #保存 return Response(serializer.data,status=201) 返回