首页 > 其他 > 详细

RestFramework的过滤组件 和 分页组件

时间:2019-11-03 16:56:16      阅读:118      评论:0      收藏:0      [点我收藏+]

群查接口各种筛选组件数据准备

models.py

class Car(models.Model):
    name = models.CharField(max_length=16, unique=True, verbose_name=车名)
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name=价格)
    brand = models.CharField(max_length=16, verbose_name=品牌)

    class Meta:
        db_table = api_car
        verbose_name = 汽车表
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

 

admin.py

admin.site.register(models.Car)

serializers.py

class CarModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Car
        fields = [name, price, brand]

 

views.py

# Car的群查接口
from rest_framework.generics import ListAPIView

class CarListAPIView(ListAPIView):
    queryset = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer

urls.py

url(r^cars/$, views.CarListAPIView.as_view()),

 

 

drf搜索过滤组件

views.py

from rest_framework.generics import ListAPIView

# 第一步:drf的SearchFilter - 搜索过滤
from rest_framework.filters import SearchFilter

class CarListAPIView(ListAPIView):
    queryset = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer

    # 第二步:局部配置 过滤类 们(全局配置用DEFAULT_FILTER_BACKENDS)
    filter_backends = [SearchFilter]

    # 第三步:SearchFilter过滤类依赖的过滤条件 => 接口:/cars/?search=...
    search_fields = [name, price]
    # eg:/cars/?search=1,name和price中包含1的数据都会被查询出

 

 

drf排序过滤组件

views.py

from rest_framework.generics import ListAPIView

# 第一步:drf的OrderingFilter - 排序过滤
from rest_framework.filters import OrderingFilter

class CarListAPIView(ListAPIView):
    queryset = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer

    # 第二步:局部配置 过滤类 们(全局配置用DEFAULT_FILTER_BACKENDS)
    filter_backends = [OrderingFilter]

    # 第三步:OrderingFilter过滤类依赖的过滤条件 => 接口:/cars/?ordering=...
    ordering_fields = [pk, price]
    # eg:/cars/?ordering=-price,pk,先按price降序,如果出现price相同,再按pk升序

 

 

drf基础分页组件

pagenations.py

from rest_framework.pagination import PageNumberPagination

class MyPageNumberPagination(PageNumberPagination):
    # ?page=页码
    page_query_param = page
    # ?page=页面 下默认一页显示的条数
    page_size = 3
    # ?page=页面&page_size=条数 用户自定义一页显示的条数
    page_size_query_param = page_size
    # 用户自定义一页显示的条数最大限制:数值超过5也只显示5条
    max_page_size = 5

 

 

views.py

from rest_framework.generics import ListAPIView

class CarListAPIView(ListAPIView):
    # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
    queryset = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer
    
    # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可
    pagination_class = pagenations.MyPageNumberPagination

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RestFramework的过滤组件 和 分页组件

原文:https://www.cnblogs.com/s686zhou/p/11787689.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!