DRF框架(十四)——过滤Filtering,排序
发布日期:2021-05-24 10:59:01 浏览次数:10 分类:精选文章

本文共 1501 字,大约阅读时间需要 5 分钟。

Django数据过滤与排序实例详解

在Django开发过程中,对列表数据进行过滤和排序是非常常见的需求。Django REST框架提供了一些强大的工具来实现这一点,以下我们将分享一些实用的配置方法和使用技巧。

一、过滤(Filtering)

当你需要根据特定字段对数据进行过滤时,Django的django-filters扩展会帮到你。通过在项目中安装相应的包,然后在配置文件中进行相应的设置,你可以轻松地对API视图添加过滤功能。

  • 首先,确保django_filters已经安装:
    pip install django-filter
  • 打开你的settings.py文件,找到INSTALLED_APPS数组,添加'django_filters'
    INSTALLED_APPS = [   ...   'django_filters',   ...]
  • 然后在REST_FRAMEWORK配置中启用Django Filter的后端:
    REST_FRAMEWORK = {   'DEFAULT_FILTER_BACKENDS': (      'django_filters.rest_framework.DjangoFilterBackend',   ):}
  • 接下来,设置你的视图类,添加filter_fields属性,指定可以用于过滤的字段。例如,可以指定btitlebread字段:
    class BookListView(ListAPIView):   queryset = BookInfo.objects.all()   serializer_class = BookInfoSerializer   filter_fields = ('btitle', 'bread')
  • 使用时,可以通过URL params来指定过滤条件。例如:
    http://127.0.0.1:8000/books/?btitle=西游记
  • 二、排序(Sorting)

    当你需要对列表数据进行排序时,REST framework提供了OrderingFilter过滤器。以下是如何使用它的步骤:

  • 在你的视图类中,导入OrderingFilter
    from rest_framework.filters import OrderingFilterclass BookListView(ListAPIView):   ...   filter_backends = [OrderingFilter]   ordering_fields = ('id', 'bread', 'bpub_date')
  • 配置ordering_fields,指定需要支持排序的字段。比如,可以指定idbreadbpub_date字段:
    ordering_fields = ('id', 'bread', 'bpub_date')
  • 需要注意的是,排序参数是通过请求的查询字符串传递的,例如:
    http://127.0.0.1:8000/books/?ordering=-bread

    这里的-bread表示以bread字段的降序进行排序。

  • 关键点回顾

    • 过滤:使用filter_fields属性指定要过滤的字段,通过URL参数传递过滤条件。
    • 排序:启用OrderingFilter后,可以通过URL参数指定排序字段和方向,实现自定义排序。
    • 配置文件:需要在settings.py中启用django_filters和相应的REST framework过滤器后端。

    通过以上配置,你可以轻松地对列表数据进行过滤和排序,从而提升API的灵活性和实用性。

    上一篇:DRF项目(一)创建rest下面,并且进行配置,建模,往数据库添加数据
    下一篇:DRF框架(十三)——限流,可以对接口访问的频次进行限制,以减轻服务器压力。

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月12日 08时08分07秒