天天看点

「Django REST Framework 框架」ViewSet视图设置解析及应用举例内容介绍ViewSet视图设置应用举例

全部 Django Web 开发文章索引目录传送门:

【Django Web 开发】全部文章目录索引

文章目录

  • 内容介绍
  • ViewSet视图设置
  • 应用举例

内容介绍

代码内容基于「Django REST Framework API框架」源码版本 3.12.x ,更新内容会进行标记说明对应版本。

Django 的 ORM(Object Relational Mapping,对象关系映射) 可以快速构造 SQL 查询,但视图中已经构建了 Model 的情况下依旧需要创造一些逻辑代码,对这些封装可以再对代码简化。

ViewSet视图设置

1.ViewSet 操作

# 提供了标准的创建/检索/更新/删除实例对象的路由,并拥有相关属性
# ---参数---
# basename:用于创建 URL 的基础名称
# action:当前操作的动作名称字符串(如 list)
# detail:是否返回列表/详情信息的布尔值
# suffix:视图集类型的显示后缀
# name:视图集的显示名称, 会与 suffix 参数互斥
# description:单个试图的显示描述

# 展示标准的空视图集示例,路由器类将处理的操作。
# 如果您使用格式后缀,请确保还包括每个操作的`format=None`操作。

class ModelNameViewSet(viewsets.ViewSet):
    def list(self, request):
        pass

    def create(self, request):
        pass

    def retrieve(self, request, pk=None):
        pass

    def update(self, request, pk=None):
        pass

    def partial_update(self, request, pk=None):
        # 不常用
        pass

    def destroy(self, request, pk=None):
        pass
           

2.API参考

# ViewSet 集成自 APIView,可以使用任何标准属性获取数值帮助 API 构建,
# ---常用说明---
# permission_classes,authentication_classes 控制访问策略。
# GenericViewSet 是继承自 GenericAPIView,并提供了 get_object 和 get_queryset 的方法以及其他视图行为的方法。
# ModelViewSet 是继承自 GenericAPIView,并支持 .list(),.retrieve(),.create(),.update(),.partial_update() 和 .destroy() 方法的视图类,需要指定 queryset 和 serializer_class 两个属性。
# ReadOnlyModelViewSet 时继承自GenericAPIView,并支持 .list(),.retrieve() 的只读视图类,需要指定 queryset 和 serializer_class 两个属性。
           

应用举例

1.ViewSet基础功能

# 查看源码,路径在rest_framework/viewset.py中
# 根据几个重要的基础方法类按照自己的实际情况进行创建新的方法类
from rest_framework import mixins

mixins.CreateModelMixin,  # 创建数据
mixins.RetrieveModelMixin, # 单个查询数据
mixins.UpdateModelMixin, # 覆盖替换数据
mixins.DestroyModelMixin, # 删除数据
mixins.ListModelMixin, # 列表查询数据
           

2.自定义ViewSet

# 自定义的只读、上传viewset类
class ReadUpdateModelViewSet(mixins.RetrieveModelMixin,
                             mixins.ListModelMixin,
                             mixins.UpdateModelMixin,
                             GenericViewSet):
    """
    自定义ViewSet 实现查,改
    """
    pass


# 自定义的只读、增加viewset类
class ReadAddModelViewSet(mixins.CreateModelMixin,
                          mixins.ListModelMixin,
                          mixins.RetrieveModelMixin,
                          GenericViewSet):
    """
    自定义ViewSet 实现查,增
    """
    pass



# 自定义的只读、增加、删除的viewset类
class ReadAddDeleteModelViewSet(mixins.CreateModelMixin,
                                mixins.RetrieveModelMixin,
                                mixins.DestroyModelMixin,
                                mixins.ListModelMixin,
                                GenericViewSet):
    """
    自定义ViewSet 实现查,增 , 删
    """
    pass