当前位置: 首页 > news >正文

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

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializerclass BookView(ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializer

ReadOnlyModelViewSet


`ReadOnlyModelViewSet` 继承自 `GenericViewSet`,同时包括了以下 Mixin 类:
- `ListModelMixin`:提供 `list` 方法,用于获取对象列表。
- `RetrieveModelMixin`:提供 `retrieve` 方法,用于获取单个对象。

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

from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import Book
from .serializers import BookSerializerclass BookReadOnlyView(ReadOnlyModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializer

视图和 URL 配置

视图

对于 `ModelViewSet`:

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializerclass BookView(ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializer

对于 `ReadOnlyModelViewSet`:

from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import Book
from .serializers import BookSerializerclass BookReadOnlyView(ReadOnlyModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializer

URLs:

使用 `ModelViewSet` 配置 URL:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookViewrouter = DefaultRouter()
router.register(r'books', BookView)urlpatterns = [path('', include(router.urls)),
]

使用 `ReadOnlyModelViewSet` 配置 URL:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookReadOnlyViewrouter = 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` 可以大大简化视图的编写过程,避免重复代码,并提高代码的可维护性和可读性。

http://www.lryc.cn/news/407923.html

相关文章:

  • 《0基础》学习Python——第二十四讲__爬虫/<7>深度爬取
  • Python Pygame制作简单五子棋游戏
  • JS+H5在线文心AI聊天(第三方接口)
  • kafka源码阅读-ReplicaStateMachine(副本状态机)解析
  • 【MetaGPT系列】【MetaGPT完全实践宝典——如何定义单一行为多行为Agent】
  • Kolla-Ansible的确是不支持CentOS-Stream系列产品了
  • IDEA启动C:\Users\badboy\.jdks\corretto-17.0.7\bin\java.exe -Xmx700m报错
  • ctfshow298-300(java信息泄露,代码审计)
  • Java 基础 and 进阶面试知识点(超详细)
  • 【LabVIEW作业篇 - 5】:水仙花数、数组与for循环的连接
  • Kafka系列之如何提高消费者消费速度
  • mac安装Whisper
  • Linux:进程概述(什么是进程、进程控制块PCB、并发与并行、进程的状态、进程的相关命令)
  • Unity UGUI 之 坐标转换
  • 使用 uPlot 在 Vue 中创建交互式图表
  • SpringBoot 项目配置文件注释乱码的问题解决方案
  • TTS如何正确读AI缩写、金额和数字
  • python基础知识点(蓝桥杯python科目个人复习计划75)
  • 小技巧:如何在已知PDF密码情况下去掉PDF的密码保护
  • Java泛型的介绍和基本使用
  • 【C++】动态内存管理与模版
  • MongoDB - 组合聚合阶段:$group、$match、$limit、$sort、$skip、$project、$count
  • vue element-ui日期控件传参
  • MacOS安装SDKMan管理Java版本
  • 【网络安全的神秘世界】文件包含漏洞
  • 并发编程--volatile
  • 记录unraid docker更新的域名
  • SpringCloud+Vue3多对多,多表联查
  • 麒麟系统信创改造
  • 【Android】ListView和RecyclerView知识总结