欢迎访问宙启技术站
智能推送

Python中使用DjangoRestFramework的SearchFilter实现根据关键字搜索的API

发布时间:2023-12-12 12:32:01

在Django框架中使用Django Rest Framework的SearchFilter可以实现根据关键字进行搜索的API。SearchFilter是Django Rest Framework提供的一个过滤器,它可以使用关键字对查询结果进行过滤。

首先,在Django的settings.py文件中配置Django Rest Framework。设置REST_FRAMEWORK的DEFAULT_FILTER_BACKENDS为'django_filters.rest_framework.DjangoFilterBackend',并将DEFAULT_AUTHENTICATION_CLASSES和DEFAULT_PERMISSION_CLASSES设置为适当的身份验证和权限。

接下来,创建一个模型并进行迁移。假设我们有一个名为Book的模型,它包含了书籍的标题(title)和作者(author)等字段。

from django.db import models

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

然后,创建一个序列化器(serializers.py)来序列化Book模型。

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'author']

在视图中,创建一个视图集(viewsets.py)来处理搜索请求。

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['title', 'author']

在这个视图集中,我们使用了SearchFilter作为过滤器backend,通过在search_fields中设置搜索字段来指定搜索的字段。

最后,需要将这个视图集添加到路由中(urls.py)。

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .viewsets import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

现在可以使用关键字对Book进行搜索了。例如,假设我们有两本书的标题分别为《Python Cookbook》和《Django Web Development》,我们可以通过发送一个GET请求到'/books/?search=django'来搜索书籍。

这个API将返回标题中包含关键字'django'的书籍的查询结果。