DRF框架常用的几个类用法介绍

1.APIView

1.APIView是REST framework提供的所有视图的基类,继承自Django的View;
2.支持定义的属性:

authentication_classes 列表或元祖,身份认证类
permissoin_classes 列表或元祖,权限检查类
throttle_classes 列表或元祖,流量控制类

3.在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。
class BookListView(APIView):
    def get(self, request):
        books = BookInfo.objects.all()
        serializer = BookInfoSerializer(books, many=True)
        return Response(serializer.data)

2.GenericAPIView

1.继承自APIVIew,主要增加了操作序列化器和数据库查询的方法
2.提供的关于序列化器使用的属性与方法:

①属性:
serializer_class 指明视图使用的序列化器
②方法:
get_serializer_class(self) 返回序列化器类,默认返回serializer_class
get_serializer(self, args, *kwargs) 返回序列化器对象

3.提供的关于数据库查询的属性与方法:

①属性:
queryset 指明使用的数据查询集
②方法:
get_queryset(self) 返回视图使用的查询集
get_object(self) 返回详情视图所需的模型类数据对象

class BookDetailView(GenericAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    def get(self, request, pk):
        # get_object()方法根据pk参数查找queryset中的数据对象
        book = self.get_object() 
        serializer = self.get_serializer(book)
        return Response(serializer.data)

3.五个扩展类ListModelMixin/CreateModelMixin/RetrieveModelMixin/UpdateModelMixin/DestroyModelMixin

这五个扩展类需要搭配GenericAPIView父类,因为五个扩展类的实现需要调用GenericAPIView提供的序列化器与数据库查询的方法

在此仅介绍ListModelMixin的用法,其他几个类比
class BookListView(ListModelMixin, GenericAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    def get(self, request):
    	 # list的方法封装了查询集,序列化,返回序列化的过程,可以直接调用即可
        return self.list(request)


# ListModelMixin源码参考
class ListModelMixin(object):
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        # 过滤
        queryset = self.filter_queryset(self.get_queryset())
        # 分页
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        # 序列化
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

4.五个扩展类的子类 CreateAPIView/ListAPIView/RetrieveAPIView/DestoryAPIView/UpdateAPIView

日常用的较多,五个子类继承了各自的扩展类和GenericAPIView,并进一步封装了get/post/put/delete方法,所以继承扩展类的子类时不用再定义get/post/put/delete方法

class BookView(ListAPIView,CreateAPIView):
    serializer_class = BookSerialziers  # 指定序列化器
    queryset = BookInfo.objects.all() # 所有查询集

    
# ListAPIView源码参考
class ListAPIView(mixins.ListModelMixin,GenericAPIView):
    """
    Concrete view for listing a queryset.
    """
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)
# CreateAPIView源码参考
class CreateAPIView(mixins.CreateModelMixin,GenericAPIView):
    """
    Concrete view for creating a model instance.
    """
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

你可能感兴趣的:(DRF框架常用的几个类用法介绍)