Django REST Framework(十三)视图集-GenericViewSet

Django REST Framework 中,`ModelViewSet` 和 `ReadOnlyModelViewSet` 提供了快速实现常见视图操作的便捷方法。它们分别继承自 `GenericViewSet` 并组合了多个 Mixin 类,使得视图的编写变得更加简单。

ModelViewSet

ModelViewSet` 继承自 `GenericViewSet`,同时包括了以下 Mixin 类:

  • `ListModelMixin`:提供 `list` 方法,用于获取对象列表。

  • `RetrieveModelMixin`:提供 `retrieve` 方法,用于获取单个对象。

  • `CreateModelMixin`:提供 `create` 方法,用于创建新对象。

  • `UpdateModelMixin`:提供 `update` 方法,用于更新对象。

  • `DestroyModelMixin`:提供 `destroy` 方法,用于删除对象。

这样,`ModelViewSet` 提供了完整的 CRUD(创建、读取、更新、删除)操作。```python

python 复制代码
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

ReadOnlyModelViewSet

`ReadOnlyModelViewSet` 继承自 `GenericViewSet`,同时包括了以下 Mixin 类:

  • `ListModelMixin`:提供 `list` 方法,用于获取对象列表。

  • `RetrieveModelMixin`:提供 `retrieve` 方法,用于获取单个对象。

这样,`ReadOnlyModelViewSet` 仅提供读取操作(列表和详细信息),而不提供创建、更新和删除操作。

python 复制代码
from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookReadOnlyView(ReadOnlyModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

视图和 URL 配置

视图

对于 `ModelViewSet`:

python 复制代码
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

对于 `ReadOnlyModelViewSet`:

python 复制代码
from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookReadOnlyView(ReadOnlyModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

URLs:

使用 `ModelViewSet` 配置 URL:

python 复制代码
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookView

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

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

使用 `ReadOnlyModelViewSet` 配置 URL:

python 复制代码
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookReadOnlyView

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

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

详细解释

  1. ModelViewSet :通过组合多个 Mixin 类,提供了完整的 CRUD 功能。继承 `ModelViewSet` 的视图类只需定义 `queryset` 和 `serializer_class`。

  2. ReadOnlyModelViewSet :仅提供读取功能,适用于只需要查看数据而不需要修改数据的场景。继承 `ReadOnlyModelViewSet` 的视图类也只需定义 `queryset` 和 `serializer_class`。

  3. queryset 属性定义了视图集将使用的查询集。在上述示例中,`BookView` 和 `BookReadOnlyView` 将使用 `Book` 模型的所有对象。

  4. serializer_class 属性定义了视图集将使用的序列化器类。在上述示例中,`BookView` 和 `BookReadOnlyView` 将使用 `BookSerializer`。

  5. DefaultRouter:Django REST Framework 提供的一个简单路由器,自动为视图集生成 URL 路由。

通过上述配置,使用 `ModelViewSet` 和 `ReadOnlyModelViewSet` 可以大大简化视图的编写过程,避免重复代码,并提高代码的可维护性和可读性。

相关推荐
B站计算机毕业设计超人5 分钟前
计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
大数据·python·机器学习·spark·课程设计·数据可视化·推荐算法
计算机徐师兄17 分钟前
Python基于Django的web漏洞挖掘扫描技术的实现与研究(附源码,文档说明)
python·django·漏洞扫描·web漏洞挖掘扫描·python django·python漏洞挖掘扫描技术
m0_7482466118 分钟前
【论文投稿】Python 网络爬虫:探秘网页数据抓取的奇妙世界
开发语言·爬虫·python
minstbe22 分钟前
AI开发 - 算法基础 递归 的概念和入门(二)汉诺塔问题 递归的应用和使用注意 - Python
开发语言·python·算法
web1478621072337 分钟前
Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
python·信息可视化·课程设计
GraduationDesign41 分钟前
基于SpringBoot的在线文档管理系统的设计与实现
java·spring boot·后端
岁月如歌,青春不败1 小时前
HMSC联合物种分布模型
开发语言·人工智能·python·深度学习·r语言
susu10830189111 小时前
python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作
python·selenium
Pocker_Spades_A1 小时前
阿里云-通义灵码:在 PyCharm 中的强大助力(下)
ide·python·阿里云·pycharm
chengxuyuan1213_1 小时前
Python有哪些常用的库
开发语言·python