- 1、获取列表资源 —— 序列化返回多个模型类对象
- 继承自
GenericAPIView,它提供了下面的方法:
self.get_queryset():获取查询集;需指定哪个模型类(定义类属性 queryset =)
self.get_serializer():实例化序列化器对象;需指定哪个序列化器(定义类属性serializer_class =)
from rest_framework import status
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from .models import *
from .serializers import *
class BooksView(GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
def get(self, request):
books = self.get_queryset()
serializer = self.get_serializer(instance=books, many=True)
return Response(data=serializer.data)
def post(self, request):
bs = self.get_serializer(data=request.data)
if not bs.is_valid():
return Response(data={'errmsg': '参数错误'}, status=status.HTTP_400_BAD_REQUEST)
bs.save()
return Response(data=bs.data)
- 3、获取单一资源 —— 序列化返回单一模型类对象
注意两个方法:
-lookup_field = 'pk'# 该类属性默认值就是’pk’ —— 默认唯一过滤依据’pk’字段 lookup_url_kwarg ='pk # 该类属性默认等于lookup_field —— 指定提取过滤字段值的分组名称
class BookView(GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
def get(self, request, pk):
book = self.get_object()
serializer = self.get_serializer(instance=book)
return Response(data=serializer.data)
def put(self, request, pk):
book = self.get_object()
bs = self.get_serializer(instance=book, data=request.data)
if not bs.is_valid():
return Response(data={'errmsg':'参数有误'}, status=status.HTTP_400_BAD_REQUEST)
bs.save()
return Response(data=bs.data)
def patch(self, request, pk):
book = self.get_object()
bs = self.get_serializer(instance=book, data=request.data, partial=True)
if not bs.is_valid():
return Response(data={'errmsg': '参数有误'}, status=status.HTTP_400_BAD_REQUEST)
bs.save()
return Response(data=bs.data)
def delete(self,request, pk):
book = self.get_object()
book.delete()
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
from django.contrib import admin
from django.urls import path,re_path
from books_test.views import *
urlpatterns = [
path('admin/', admin.site.urls),
# 获取多个对象
re_path(r'^books/$', BooksView.as_view()),
# 获取单一资源:GET + /books/(?P<pk>\d+)/ = self.get
re_path(r'^books/(?P<pk>\d+)/$', BookView.as_view()),
]