DRF两个基类视图

(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
发布了21 篇原创文章 · 获赞 34 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44000328/article/details/84863393