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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Django REST framework 中,可以使用 `django_filters` 库提供的 `CharFilter` 进行多个字段的模糊查询。示例如下: 假设有一个 `Book` 模型类,其中包含 `title` 和 `author` 两个字段,现在要查询标题或作者中包含 "Python" 的书籍: ```python from django_filters import rest_framework as filters class BookFilter(filters.FilterSet): search = filters.CharFilter(method="filter_search") class Meta: model = Book fields = ["search"] def filter_search(self, queryset, name, value): return queryset.filter(Q(title__icontains=value) | Q(author__icontains=value)) ``` 以上代码中,定义了一个名为 `search` 的过滤器字段,并指定了一个名为 `filter_search` 的方法来实现模糊查询。在 `filter_search` 方法中,使用 `Q` 对象和 `|` 运算符将两个模糊查询条件进行了 OR 运算,并返回了一个包含标题或作者中包含 "Python" 的书籍的查询集。 在视图中使用过滤器类进行查询: ```python class BookListAPIView(ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer filter_backends = [filters.DjangoFilterBackend] filterset_class = BookFilter ``` 以上代码中,指定了 `filterset_class` 属性为上面定义的 `BookFilter` 类,并将 `filter_backends` 属性设置为 `DjangoFilterBackend`,以启用过滤器功能。 最后,可以通过在 URL 中传递 `search` 参数来进行模糊查询: ``` http://example.com/api/books?search=Python ``` 以上 URL 将返回包含标题或作者中包含 "Python" 的书籍的查询集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值