一、继承apiview
# class BookDetailView(APIView):
#
#
# def get(self, request):
# # 获取全部
# books = BookInfo.objects.all()
# s = BookInfoSerializer(books, many=True)
# return Response(s.data)
#
#
# def get(self, request, pk):
# # 获取单个
# book = BookInfo.objects.get(id=pk)
# s = BookInfoSerializer(book)
# return Response(s.data)
#
#
# def get(self, request):
# # 创建一个对象()
# date = {'btitle': "高数", 'bput_date': "2018-01-01"}
# s = BookInfoSerializer(data=date)
# s.is_valid(raise_exception=True)
# s.save()
# return Response(s.validated_data)
#
#
# def get(self, request):
# # 更新一个对象
# data = {"btitle": "巴西柔术"}
# book = BookInfo.objects.get(btitle='高数')
# s = BookInfoSerializer(book, data=data, partial=True)
# s.is_valid(raise_exception=True)
# s.save()
# return Response(s.validated_data)
二、继承GenericAPIView
# class BookDetailView(GenericAPIView):
# queryset = BookInfo.objects.all()
# serializer_class = BookInfoSerializer
#
# def get(self, request):
# # 获取全部数据
# books = self.get_queryset()
# s = self.get_serializer(books, many=True)
# return Response(s.data)
#
# def get(self, request, pk):
# # 获取单一数据
# book = self.get_object()
# s = self.get_serializer(book)
# return Response(s.data)
#
# def get(self, request):
# # 增加一条数据
# data = {'btitle': '泰拳', 'bput_date': '2018-01-01'}
# s = self.get_serializer(data=data)
# s.is_valid(raise_exception=True)
# s.save()
# return Response(s.validated_data)
#
# def get(self, request):
# data = {'btitle': '桑巴'}
# book = BookInfo.objects.get(btitle='泰拳')
# s = self.get_serializer(book, data=data, partial=True)
# s.is_valid(raise_exception=True)
# s.save()
# return Response(s.validated_data)
三、GenericAPIView五个拓展类使用
# class BookDetailView(CreateModelMixin,ListModelMixin,GenericAPIView):
# # GenericAPIView拓展类查询列表和创建
# queryset = BookInfo.objects.all()
# serializer_class = BookInfoSerializer
# def get(self,request):
# return self.list(request)
# def post(self,request):
# return self.create(request)
#
# class BookDetailView(DestroyModelMixin, UpdateModelMixin, RetrieveModelMixin, GenericAPIView):
# # GenericAPIView拓展类单个对象和修改数据(???????partial总是false),删除
# queryset = BookInfo.objects.all()
# serializer_class = BookInfoSerializer
#
# def get(self, request, pk):
# return self.retrieve(request)
#
# def post(self, request, pk):
# return self.update(request, content={"partial": True})
#
# def put(self, request, pk):
# return self.destroy(request)
四、GenericAPIView和拓展类的9种组合类(写了4种)
class BookDetailView(CreateAPIView):
# GenericAPIView拓展类查询列表和创建
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
class BookDetailView(ListAPIView):
# GenericAPIView拓展类查询列表和创建
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
class BookDetailView(RetrieveAPIView):
# GenericAPIView拓展类查询列表和创建
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
class BookDetailView(DestroyAPIView):
# GenericAPIView拓展类查询列表和创建
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
五、视图结果集ViewSet
路由:
url(r'(P<pk>.*)/$',views.BookDetailView.as_view({'get':'retrieve','put':'update','delete':'destory'})),
url(r'^',views.BookDetailView.as_view({'get':'list','post':'create'})),
视图:
class BookDetailView(ViewSet):
def list(self, request):
return HttpResponse('list')
def retrieve(self, request, pk):
return HttpResponse('retrieve')
def create(self, request):
return HttpResponse('create')
def update(self, request, pk):
return HttpResponse('update')
def destory(self, request, pk):
return HttpResponse('destory')
六、GenericViewSet配合5个拓展类用法:
路由和ViewSet一样
视图:
class BookDetailView(CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, ListModelMixin,
GenericViewSet):
# GenericViewSet配合拓展类
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
七、ModelViewSet(GenericViewSet的拓展类,继承GnericViewSet和5个拓展类)
class BookInfoViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
@action(methods=['get'], detail=False)
def latest(self, request):
book = BookInfo.objects.latest('id')
s = self.get_serializer(book)
return Response(s.data)