django rest framework 数据的查找、过滤、排序的示例

yizhihongxing

下面是关于 Django Rest Framework 的数据查找、过滤、排序示例的攻略:

1.准备工作

要使用Django Rest Framework进行数据查找、过滤和排序,需要做以下准备工作:

  • 安装Django Rest Framework
pip install djangorestframework
  • 在项目的settings.py中安装DRF
INSTALLED_APPS = (
    ...
    'rest_framework',
)

2. 数据查找的示例

在DRF中,数据查找的关键字为filter。在视图中,可以添加多个过滤器来实现数据查找的功能。下面是一个数据查找的示例:

2.1.示例代码

# models.py

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    rating = models.IntegerField()

# serializers.py

class BookSerializer(serializers.ModelSerializer):

    class Meta:
        model = Book
        fields = '__all__'

# views.py

class BookList(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = [filters.OrderingFilter, filters.SearchFilter, DjangoFilterBackend]
    search_fields = ['title', 'author']
    filterset_fields = ['rating']
    ordering_fields = ['title', 'rating']

2.2.说明

在视图代码中,我们定义了filter_backends属性,这里我们指定了3种过滤器:OrderingFilter、SearchFilter和DjangoFilterBackend。

  • OrderingFilter

这个过滤器允许客户端使用ordering查询参数对数据进行排序。

ordering_fields属性指定了可以排序的字段列表,客户端将使用逗号分隔的字段来指定查询顺序。后续的代码中,我们指定允许根据Book的title和rating排序。

  • SearchFilter

这个过滤器允许客户端使用search查询参数对数据进行模糊匹配搜索。

search_fields属性指定了可以搜索的字段列表,客户端将使用逗号分隔的字段来指定查询条件。后续的代码中,我们指定允许根据Book的title和author进行搜索。

  • DjangoFilterBackend

这个过滤器使用Django-Filters提供的功能实现了客户端通过filter查询参数对数据进行过滤。

filterset_fields属性指定了可以过滤的字段列表,客户端将使用过滤器的名称和值来指定过滤条件。后续的代码中,我们指定允许根据Book的rating进行过滤。

在上述示例中,我们已经实现了3种过滤器。现在我们可以通过访问BookList视图来进行数据的过滤、查找和排序的操作:

  • 根据title和rating进行排序
http://localhost:8000/books?ordering=title,rating
  • 根据title或author进行模糊匹配搜索
http://localhost:8000/books?search=hello
  • 根据rating进行过滤
http://localhost:8000/books?rating=3

3. 数据过滤的示例

在DRF中,数据过滤的关键字为filter。在视图中,我们使用Django-Filters来实现数据过滤的功能。下面是一个数据过滤的示例:

3.1.示例代码

# models.py
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publisher = models.CharField(max_length=100)
    publication_date = models.DateField()
    rating = models.IntegerField()

# serializers.py
class BookSerializer(serializers.ModelSerializer):

    class Meta:
        model = Book
        fields = '__all__'

# filters.py

class BookFilter(django_filters.FilterSet):
    title = django_filters.CharFilter(lookup_expr='icontains')
    author = django_filters.CharFilter(lookup_expr='icontains')
    publisher = django_filters.CharFilter(lookup_expr='icontains')
    publication_date = django_filters.DateFilter()
    rating = django_filters.NumberFilter()

    class Meta:
        model = Book
        fields = ['title', 'author', 'publisher', 'publication_date', 'rating']

# views.py

class BookList(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_class = BookFilter

3.2.说明

在视图代码中,我们定义了filter_backends属性和filterset_class属性,这里我们指定了DjangoFilterBackend过滤器和自定义的BookFilter过滤器。

  • DjangoFilterBackend

这个过滤器使用Django-Filters提供的功能实现了客户端通过filter查询参数对数据进行过滤。

  • BookFilter

这个过滤器继承自django_filters.FilterSet类并且实现了对Book模型的过滤。

在上述示例中,我们定义了5个字段:title、author、publisher、publication_date和rating,并分别实现了对应的过滤器。

  • title和author字段使用的是CharFilter,允许客户端使用icontains进行查找title或author字段;
  • publisher字段使用的是CharFilter允许客户端使用icontains进行查找publisher字段;
  • publication_date字段使用的是DateFilter允许客户端使用等于或者范围查询;
  • rating字段使用的是NumberFilter允许客户端使用整数等于或者范围查询;

我们已经实现了BookFilter过滤器,在上述示例的视图中,我们通过filterset_class属性指定了BookFilter过滤器。

现在我们可以通过访问BookList视图来进行数据的过滤的操作:

  • 根据title或者author进行查找
http://localhost:8000/books?title=hello
http://localhost:8000/books?author=world
  • 根据publication_date进行范围查找
http://localhost:8000/books?publication_date__gt=2022-08-05
http://localhost:8000/books?publication_date__lt=2022-08-05
  • 根据rating进行范围查找
http://localhost:8000/books?rating__gt=3
http://localhost:8000/books?rating__lt=3

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django rest framework 数据的查找、过滤、排序的示例 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • django ajax发送post请求的两种方法

    让我来给您讲解一下关于”django ajax发送post请求的两种方法”的攻略。 前言 在Web开发中,使用 Ajax(Asynchronous JavaScript and XML)进行异步请求已经成为一项非常基础且重要的技能。可以通过使用 Ajax 请求后台 API 接口获取数据,实现后台数据能够实时更新到前端。 当然,对于发起 Ajax 请求的方式,…

    人工智能概论 2023年5月25日
    00
  • 易语言给组件上加载图片方法步骤

    下面是关于易语言给组件上加载图片方法步骤的完整攻略。 概述 易语言是一种非常流行的编程语言,在Windows平台下广泛应用。对于易语言开发者而言,如果需要在自己的程序中展示图片,那么就需要了解如何给组件上加载图片方法。本文将详细讲解这个问题。 步骤 下面是给组件上加载图片的方法步骤: 打开易语言的开发环境,并在其中新建一个工程。 在工程中添加一个需要加载图片…

    人工智能概论 2023年5月25日
    00
  • Python OpenCV绘制各类几何图形详解

    下面是Python OpenCV绘制各类几何图形的完整攻略: 前言 在计算机视觉的应用中,常常需要在图像上绘制各种几何图形,如:线段、矩形、圆等等。本文将详细讲解如何使用Python的OpenCV库在图像上绘制各类几何图形。 绘制线段 OpenCV中提供了cv2.line()函数来绘制线段,函数原型如下: cv2.line(img, pt1, pt2, co…

    人工智能概论 2023年5月25日
    00
  • 为了防老板窥屏 小编总结一些防窥屏套路

    为了防老板窥屏 小编总结一些防窥屏套路 为了防止在公共场合或者公司中使用电脑时被别人窥屏,小编总结了一些防窥屏的套路,希望能帮到大家。 1. 调整屏幕亮度和角度 将屏幕的亮度调低可以有效地减少别人窥屏的概率。同时,调整屏幕的角度,使得他人无法直接看到显示屏,也是一个不错的方法。 2. 使用隐私屏幕保护膜 隐私屏幕保护膜可以有效地防止旁人通过侧面角度窥屏。这种…

    人工智能概览 2023年5月25日
    00
  • pyenv与virtualenv安装实现python多版本多项目管理

    下面是Pyenv和Virtualenv实现Python多版本多项目管理的完整攻略。 1. 什么是Pyenv和Virtualenv? Pyenv和Virtualenv是Python开发中非常重要的两个工具,它们的主要作用是管理Python版本和虚拟环境。 Pyenv可以让你安装和切换Python的不同版本,而Virtualenv则可以在同一台机器上创建多个虚拟…

    人工智能概览 2023年5月25日
    00
  • 酷! 程序员用Python带你玩转冲顶大会

    酷! 程序员用Python带你玩转冲顶大会攻略 简介 《冲顶大会》是一款热门的在线答题游戏,而Python是一门功能强大的编程语言。这篇攻略将会介绍如何使用Python来玩转《冲顶大会》。 准备工作 安装 Python 3.x,推荐使用最新版本 安装 requests 和 Beautiful Soup 4 这两个 Python 库 pip3 install …

    人工智能概论 2023年5月25日
    00
  • PyTorch 多GPU下模型的保存与加载(踩坑笔记)

    PyTorch是一个开放源码的机器学习库,支持多GPU并行计算。在使用多GPU训练模型时,保存和加载模型需要特别注意。下面是“PyTorch 多GPU下模型的保存与加载(踩坑笔记)”的攻略过程,具体包含以下几个步骤: 1. 引入必要的库 在保存和加载模型之前,我们需要引入必要的库来支持模型的保存和加载。 import torch from torch.nn.…

    人工智能概论 2023年5月25日
    00
  • 对Django中内置的User模型实例详解

    对Django中内置的User模型实例详解 什么是User模型? User 模型是 Django 框架内置的一个用户认证模型。这个模型包含了一些常见的认证相关的字段,如:用户名、密码、邮箱等。默认情况下,这个模型已经集成到了 Django 的 auth 应用中。 User模型的用途 User 模型被用于处理和管理用户认证系统。用户可以使用 User 模型进行…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部