文章目录
内容介绍
Django 的 ORM(Object Relational Mapping,对象关系映射) 可以快速构造 SQL 查询,但视图中已经构建了 Model 的情况下依旧需要创造一些逻辑代码,对这些封装可以再对代码简化。
ViewSet 操作
在标准的接口中, 提供了标准的创建/检索/更新/删除实例对象的路由,并拥有相关属性
- basename:用于创建 URL 的基础名称
- action:当前操作的动作名称字符串(如 list)
- detail:是否返回列表/详情信息的布尔值
- suffix:视图集类型的显示后缀
- name:视图集的显示名称, 会与 suffix 参数互斥
- description:单个试图的显示描述
class ModelNameViewSet(viewsets.ViewSet):
"""
Example empty viewset demonstrating the standard
actions that will be handled by a router class.
If you're using format suffixes, make sure to also include
the `format=None` keyword argument for each action.
"""
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
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 两个属性。
自定义ViewSet
查看源码,路径在rest_framework/viewset.py中
根据几个重要的基础方法类按照自己的实际情况进行创建新的方法类
from rest_framework import mixins
mixins.CreateModelMixin, # 创建数据
mixins.RetrieveModelMixin, # 单个查询数据
mixins.UpdateModelMixin, # 覆盖替换数据
mixins.DestroyModelMixin, # 删除数据
mixins.ListModelMixin, # 列表查询数据
- 自定义的只读、上传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