使用DRF / django-filter进行过滤操作

首先

我使用Django REST Framework创建了一个Web API。在这篇文章中,我使用了django-filter来根据请求进行过滤并返回响应。我参考了Django REST Framework的Filtering页面。环境如下:

    • OS: Windows 10 Pro (WSL2 Ubuntu-20.04)

 

    • Python: 3.8.5

 

    • Django: 3.2

 

    • djangorestframework: 3.12.4

 

    django-filter: 2.4.0

安装和设置

用以下的命令进行安装。

$ pip install django-filter

另外,在项目的 settings.py 中添加 ‘django_filters’ 和 ‘DEFAULT_FILTER_BACKENDS’。

# Application definition

INSTALLED_APPS = [
    ...
    'rest_framework',
    'django_filters',
]

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}

现在可以加载并使用DRF了。

过滤

在ViewSets.py中,要指定要过滤的字段,请将其指定为filterset_fields。在这里,我们指定了在Django REST Framework中处理API创建时的名为Info的模型的id字段。

from .models import Info
from .serializers import InfoSerializer
from rest_framework import viewsets

class InfoViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Info.objects.all()
    serializer_class = InfoSerializer
    filterset_fields = ['id']

确认行动

应该已经完成了过滤设置,为了进行功能确认,请在开发服务器上使用 python manage.py runserver 命令启动开发服务器。访问 http://localhost:8000/api/info/?id=1111111,并指定id,将返回过滤结果。另外,访问 http://localhost:8000/api/info ,API控制台右上方将添加一个”过滤”选项,也可以手动查看过滤结果。

最后

可以使用django-filter来进行筛选。接下来,尝试通过用React开发的前端调用API来获取适当的数据。

广告
将在 10 秒后关闭
bannerAds