📅  最后修改于: 2023-12-03 15:38:08.108000             🧑  作者: Mango
django-filters是Django中使用过滤器的一种方法,能够让你快速创建过滤数据的API视图。在本文中,我们将深入探讨如何使用带有视图集的django-filters。视图集是在Django REST框架中的一种常用函数式视图类型,用于快速实现常见的HTTP操作(如GET、POST等)。
在继续阅读本文之前,请确保您满足以下环境和前提条件: 1.已经安装好Python 3.x。 2.熟悉了Django开发以及Django REST框架。
首先,您需要使用以下命令安装django-filters:
pip install django-filters
我们将使用以下示例模型来演示如何使用django-filters:
from django.db import models
class Movie(models.Model):
name = models.CharField(max_length=200)
genre = models.CharField(max_length=200)
year = models.IntegerField()
pip install django-filter djangorestframework
使用ModelSerializer创建序列化器,如下所示:
from rest_framework import serializers
from .models import Movie
class MovieSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = '__all__'
from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend
from .models import Movie
from .serializers import MovieSerializer
class MovieViewSet(viewsets.ModelViewSet):
serializer_class = MovieSerializer
queryset = Movie.objects.all()
filter_backends = [DjangoFilterBackend]
filterset_fields = ['name', 'genre', 'year']
现在你可以开始访问你的API了!
GET /movies/ HTTP/1.1
Host: localhost:8000
Content-Type: application/json
你可以将查询参数添加到URL中,如下所示:
GET /movies/?name=The%20Godfather&year=1972 HTTP/1.1
Host: localhost:8000
Content-Type: application/json
你也可以在视图集上使用FilterSet以过滤多个模型:
from django_filters import rest_framework as filters
class MovieFilter(filters.FilterSet):
min_year = filters.NumberFilter(field_name='year', lookup_expr='gte')
max_year = filters.NumberFilter(field_name='year', lookup_expr='lte')
name = filters.CharFilter(field_name='name', lookup_expr='icontains')
genre = filters.CharFilter(field_name='genre', lookup_expr='icontains')
class Meta:
model = Movie
fields = ['name', 'genre', 'min_year', 'max_year']
class MovieViewSet(viewsets.ModelViewSet):
serializer_class = MovieSerializer
queryset = Movie.objects.all()
filter_backends = [DjangoFilterBackend]
filterset_class = MovieFilter
django-filters提供了一种快速和灵活地过滤API中的数据。它通常与Django REST框架一起使用,但也可以直接与Django一起使用。此外,使用视图集将为您的RESTful API提供更好的可读性和性能。希望这篇文章能够帮助你学习如何使用django-filters并创建出更好的API视图!