DRF两个基类视图

2018-11-27  本文已影响0人  ___Mr徐


(1)APIView            (2)GenericAPIView


1)APIView 

    rest_framework.views.APIView

    APIView是REST framework提供的所有视图的基类,继承自Django的View父类。

支持定义的属性:(这些属性都是针对大方向的, 没有针对当前视图)

    authentication_classes 列表或元祖,身份认证类

    permissoin_classes 列表或元祖,权限检查类

    throttle_classes 列表或元祖,流量控制类

在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。

举例:


2)GenericAPIView

    rest_framework.generics.GenericAPIView

    继承自APIVIew,增加了对于列表视图和详情视图可能用到的通用支持方法。通常使用时,可搭配一个或多个Mixin扩展类。

支持定义的属性:(这些多出来的属性有针对当前视图的)

    列表视图与详情视图通用:

        queryset 列表视图的查询集

        serializer_class 视图使用的序列化器

    列表视图使用:

        pagination_class 分页控制类

        filter_backends 过滤控制后端

    详情页视图使用:

        lookup_field 查询单一数据库对象时使用的条件字段,默认为'pk'

        lookup_url_kwarg 查询单一数据时URL中的参数关键字名称,默认与look_field相同

提供的方法:

    列表视图与详情视图通用:

        get_queryset(self)

        返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性

        get_serializer_class(self)

        返回序列化器类,默认返回serializer_class

        get_serializer(self, args, *kwargs)

        返回序列化器对象,被其他视图或扩展类使用,如果我们在视图中想要获取序列化器对象,可以直接调用此方法。

注意,在提供序列化器对象的时候,REST framework会向对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。

举例:


总结: 

    如果只是简单的查询数据库里面的所有数据, 直接用APIView就可以了,  当然也可以用GenericAPIView

    如果要查询的数据是根据路径查询则可以用GenericAPIView

上一篇下一篇

猜你喜欢

热点阅读