在 Django REST Framework 中,视图集(Viewset)是一种方便的 API 开发方式,它将视图(View)和序列化器(Serializer)组合起来,提供了一组标准的 API 操作(列表、创建、更新、删除、详情等),可以大大简化 API 的编写和维护工作,提高开发效率和代码可读性。
视图集可以分为以下几种类型:
ModelViewSet
ModelViewSet
是最常用的视图集类型,它继承了 GenericAPIView
和 ModelMixin
,可以自动生成常用的 CRUD 操作,包括列表查询、创建、更新、删除、详情查询等。
我们可以通过设置 queryset
属性指定数据查询集,通过设置 serializer_class
属性指定数据序列化器,来自动实现 API 的基本操作。例如,我们可以在 views.py
文件中定义一个 BookViewSet
视图集:
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
在这个例子中,我们使用 viewsets.ModelViewSet
创建一个视图集,并将 Book
模型的查询集设置为 Book.objects.all()
,将 BookSerializer
序列化器设置为默认序列化器。
ReadOnlyModelViewSet
ReadOnlyModelViewSet
继承自 GenericAPIView
和 ReadOnlyModelMixin
,提供了只读的操作,包括列表查询和详情查询。
与 ModelViewSet
不同的是,ReadOnlyModelViewSet
不支持创建、更新和删除操作,适用于只读的数据接口场景。例如,我们可以在 views.py
文件中定义一个 AuthorViewSet
视图集:
from rest_framework import viewsets
from .models import Author
from .serializers import AuthorSerializer
class AuthorViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Author.objects.all()
serializer_class = AuthorSerializer
在这个例子中,我们使用 viewsets.ReadOnlyModelViewSet
创建一个只读的视图集,并将 Author
模型的查询集设置为 Author.objects.all()
,将 AuthorSerializer
序列化器设置为默认序列化器。