rest_framework框架视图集整理

news/2025/10/16 16:48:48/文章来源:https://www.cnblogs.com/ludundun/p/19146055
from rest_framework.generics import GenericAPIView
from rest_framework.request import Request
from rest_framework import filters
from rest_framework import mixins
from rest_framework import generics
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework import statusfrom .models import Project
from . import serializers
from .filters import ProjectFilter
from utils.pagination import PageNumberPagination# from utils import mixins
"""# 源码中mixins.py文件中的Mixin拓展类
获取列表数据:  ListModelMixin拓展类     ->  list action方法      -> get
创建数据:     CreateModelMixin拓展类   ->  create action方法    -> post
获取详情数据:  RetrieveModelMixin拓展类 ->  retrieve action方法  -> get
更新数据:     UpdateModelMixin拓展类   ->  update action(完整更新)、partial_update action方法(部分更新) -> put、patch
删除数据:     DestroyModelMixin拓展类  ->  destroy action方法   -> delete# 源码generics.py文件中的APIView具体的通用视图
获取列表数据:  ListAPIView         -> 继承ListModelMixin、GenericAPIView
创建数据:     CreateAPIView       -> 继承CreateModelMixin、GenericAPIView
获取详情数据:  RetrieveAPIView     -> 继承RetrieveModelMixin、GenericAPIView
更新数据:     UpdateAPIView       -> 继承UpdateModelMixin、GenericAPIView
删除数据:     DestroyAPIView      -> 继承DestroyModelMixin、GenericAPIView# 源码viewsets.py文件中的ModelViewSet视图集, GenericViewSet继承了GenericAPIView
class ModelViewSet(mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,mixins.ListModelMixin,GenericViewSet):A viewset that provides default `create()`, `retrieve()`, `update()`,`partial_update()`, `destroy()` and `list()` actions.# 源码generics.py文件中的APIView具体的混合通用视图
获取列表数据、创建数据:ListCreateAPIView
获取数据详情、更新数据:RetrieveUpdateAPIView
获取数据详情、删除数据:RetrieveDestroyAPIView
获取数据详情、更新数据、删除数据:RetrieveUpdateDestroyAPIView# 视图集
1.如果需要实现在定义路由条目时,请求方法与要调用的action方法进行一一对应,必须得继承ViewSetMixin
2.ViewSet继承了ViewSetMixin、APIView,具备请求方法与要调用的action方法进行一一对应功能、以及认证授权限流功能,但是不支持Mixin,因为没有提供get_object()、get_queryset()、geat_serializer()等方法
3.GenericViewSet继承了ViewSetMixin、GenericAPIView,具备请求方法与要调用的action方法进行一一对应功能、以及支持Mixin拓展类
4.ReadOnlyModelViewSet继承了RetrieveModelMixin、ListModelMixin、GenericViewSet,提供了读取数据的2个接口
5.ModelViewSet继承了CreateModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin、ListModelMixin、GenericViewSet,提供了6个接口
6.ViewSetMixin类提供了请求方法与要调用的action方法进行一一对应功能,在定义路由条目时,在as_view()方法中支持接收字典数据,把请求方法名称字符串作为key,把具体要调用的action方法名字符串作为值"""# class RetrieveAPIView(mixins.RetrieveModelMixin, GenericAPIView):
#     # get是请求方法名称
#     # retrieve是action名称
#     def get(self, request, *args, **kwargs):
#         return self.retrieve(request, args, kwargs)
#
#
# class UpdateAPIView(mixins.UpdateModelMixin, GenericAPIView):
#     def put(self, request, *args, **kwargs):
#         # update是一个action,完整更新
#         return self.update(request, args, kwargs)
#
#
# class DestroyAPIView(mixins.DestroyModelMixin, GenericAPIView):
#     def delete(self, request, *args, **kwargs):
#         return self.destroy(request, args, kwargs)# class ProjectDetailView(generics.RetrieveAPIView, generics.UpdateAPIView, generics.DestroyAPIView):
class ProjectDetailView(generics.RetrieveUpdateDestroyAPIView):serializer_class = serializers.ProjectModelSerializer2queryset = Project.objects.all()# def get(self, request, *args, **kwargs):#     return self.retrieve(request, args, kwargs)# def put(self, request, *args, **kwargs):#     return self.update(request, args, kwargs)## def delete(self, request, *args, **kwargs):#     return self.destroy(request, args, kwargs)# class ProjectView(generics.ListAPIView, generics.CreateAPIView):
class ProjectView(generics.ListCreateAPIView):serializer_class = serializers.ProjectModelSerializer2queryset = Project.objects.all()search_fields = ['name', 'leader', 'desc', 'interfaces__name']filter_backends = [filters.SearchFilter, filters.OrderingFilter]filterset_class = ProjectFilterpagination_class = PageNumberPaginationordering_fields = ['name', 'id', 'leader']# def get(self, request: Request, *args, **kwargs):#     return self.list(request, args, kwargs)## def post(self, request: Request, *args, **kwargs):#     return self.create(request, args, kwargs)# class ProjectAllView(generics.RetrieveUpdateDestroyAPIView, generics.ListCreateAPIView):
#     serializer_class = serializers.ProjectModelSerializer2
#     queryset = Project.objects.all()
#     search_fields = ['name', 'leader', 'desc', 'interfaces__name']
#     filter_backends = [filters.SearchFilter, filters.OrderingFilter]
#     filterset_class = ProjectFilter
#     pagination_class = PageNumberPagination
#     ordering_fields = ['name', 'id', 'leader']# 需求:将上面5个接口全部放在同一个类视图中
# class ViewSet(ViewSetMixin, views.APIView)
# class ProjectViewSet(viewsets.ViewSet):
# class ProjectViewSet(viewsets.ViewSetMixin, generics.GenericAPIView):
# class ProjectViewSet(viewsets.GenericViewSet):
# class ProjectViewSet(
#         mixins.RetrieveModelMixin,
#         mixins.UpdateModelMixin,
#         mixins.DestroyModelMixin,
#         mixins.ListModelMixin,
#         mixins.CreateModelMixin,
#         viewsets.GenericViewSet):
class ProjectViewSet(viewsets.ModelViewSet):serializer_class = serializers.ProjectModelSerializer2queryset = Project.objects.all()search_fields = ['name', 'leader', 'desc', 'interfaces__name']filter_backends = [filters.SearchFilter, filters.OrderingFilter]filterset_class = ProjectFilterpagination_class = PageNumberPaginationordering_fields = ['name', 'id', 'leader']# def retrieve(self, request, *args, **kwargs):#     instance = self.get_object()#     serializer = self.get_serializer(instance=instance)#     return Response(serializer.data, status=status.HTTP_200_OK)## def update(self, request, *args, **kwargs):#     serializer = self.get_serializer(data=request.data, instance=self.get_object())#     serializer.is_valid(raise_exception=True)#     serializer.save()#     return Response(serializer.data, status=status.HTTP_201_CREATED)## def destory(self, request, *args, **kwargs):#     instance = self.get_object()#     instance.delete()#     return Response(None, status=status.HTTP_204_NO_CONTENT)## def list(self, request, *args, **kwargs):#     queryset = self.filter_queryset(self.get_queryset())#     page = self.paginate_queryset(queryset)#     if page is not None:#         serializer = self.get_serializer(instance=page, many=True)#         return self.get_paginated_response(serializer.data)##     serializer = self.get_serializer(instance=queryset, many=True)#     return Response(data=serializer.data, status=status.HTTP_200_OK)## def create(self, request, *args, **kwargs):#     serializer = self.get_serializer(data=request.data)#     serializer.is_valid(raise_exception=True)#     serializer.save()#     return Response(data=serializer.data, status=status.HTTP_201_CREATED)def name_detail(self, request, *args, **kwargs):instance = self.get_object()return Response({'id': instance.id,'name': instance.name})def names(self, request, *args, **kwargs):queryset = self.filter_queryset(self.get_queryset())data = [ obj.name for obj in queryset]return Response(data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

x86_64架构__rdtsc指令

__rdtsc指令用于读取处理器的时间戳计数器,该计数器计算自上次复位以来的时钟周期数。这对性能监控和基准测试非常有用。 以下示例为linux环境上Demo#include <stdio.h> #include <x86intrin.h> #include…

AT_joisc2021_c フードコート (Foodcourt)

换维扫描线好题。 发现删除操作会出现过删(即删除的个数大于序列中元素数),这个很难处理。 思考一下应该能想到将每次询问查询的 \(b\to cnt_{del}+b\) 其中 \(cnt_{del}\) 为在该询问之前这个序列删除的数的个数,…

SPP question regarding Issues Due To Gaming Spoofers

Checking SPP Registry Key [Incorrect ModuleId Found]在windows下遇到该问题时,或许可以考虑导入如下的注册表文件。 下载 SPP ref: Issues Due To Gaming Spoofers

类型安全ORM的高并发场景解决方案 - 实践

类型安全ORM的高并发场景解决方案 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

L06_mybatis读取MySQL数据库(懵逼版)

由于上课完全听不懂,又不会java,经过三天折磨,查阅各种网站,总算解决了,一个,,,,,小小小小作业。 1.创建一个项目,如果IDEA为2024版,左上角File-》new-》Project按照上面图片配置就好了。 2.需要加载的依赖…

提供给第三方接口的验证方法

第三方调用(认证方式时效限制5分钟)该 postman 调用 url 为样例 url请求头: AuthorizationBasicMTIzOmRjOTg0ZDY4NzJjNWZkYWFkZDllZDg4ZGE5ZmU5ZDYwZDc40TkxMzA0NWFmNjhkMjNiMzE4NzUzZTRhYTIWMDU= 请求头: Timestamp20…

【2025最新】6款免费DLL修复工具推荐:彻底解决“XXX.dll缺失”问题!

系统频繁弹出“XXX.dll缺失”提示?本文汇总6款2025年最新免费DLL修复工具,包括金山毒霸电脑医生、迅捷DLL助手、360安全卫士等,一键扫描自动修复系统缺失DLL,支持Win7/10/11,让你的电脑秒恢复稳定运行。电脑运行时…

2025 年注浆管生产厂家最新推荐排行榜:聚焦 0.3mm 精度与国企合作案例,助力基建企业精准挑选优质供应商

在基建工程中,注浆管是保障防渗加固、隧道支护等环节安全的关键材料,其质量直接决定工程使用寿命与施工安全。当前市场上,部分厂家为压缩成本,选用低强度钢材、忽视品控,导致管材抗压不足、壁厚不均,频繁出现破裂…

vue 下拉框 vxe-select 实现人员选择下拉列表

vue 下拉框 vxe-select 实现人员选择下拉列表 使用自定义选项插槽的方式,可以灵活的实现各种类型的下拉选择 官网:https://vxeui.com github:https://github.com/x-extends/vxe-pc-ui gitee:https://gitee.com/x-e…

双核A53+开源生态,ZX7981P Wi-Fi6 5G插卡路由器开发板CPE内核新选择!

双核A53+开源生态,ZX7981P Wi-Fi6 5G插卡路由器开发板CPE内核新选择!在物联网技术飞速发展的今天,一款出色的开发平台能够极大加速产品研发进程。启明智显推出的ZX7981P Wi-Fi6 5G插卡路由器开发板,正是为高效开发…

2025 高效过滤器制造企业最新推荐榜:供货商定制方案深度解析及口碑评级

在环保水处理与空气净化行业升级提速的背景下,精密过滤器的定制适配性直接决定项目达标效率与运营成本。当前市场呈现 “两极分化” 态势:老牌企业虽经验丰富,但部分定制方案创新不足;新兴品牌虽灵活度高,却因缺乏…

最后防线 解题报告

简要题意 给定一棵 \(n\) 个节点的有根树,每个点有点权 \(a\)。求出一个访问顺序,使得所有点都在其祖先之后被访问,设第 \(i\) 个节点是第 \(p_i\) 个被访问到的,最小化 \(\sum \limits_{1\ le i \le n}p_ia_i\)。…

2025 年试验箱厂家 TOP 企业品牌推荐排行榜,氙灯老化 / 紫外老化 / 冷热冲击 / 恒温恒湿 / 高低温 / 快速温变 / 盐水喷雾 / 高温老化 / 砂尘 / 淋雨试验箱公司推荐!

2025 年试验箱厂家 TOP 企业品牌推荐排行榜,氙灯老化 / 紫外老化 / 冷热冲击 / 恒温恒湿 / 高低温 / 快速温变 / 盐水喷雾 / 高温老化 / 砂尘 / 淋雨试验箱公司推荐!引言在现代工业生产与科研活动中,试验箱作为模拟…

系统修复

cmd中文显示异常:chcp 936 (临时方法)打开控制面板--时钟和区域--区域--管理--更改系统区域设置-当前系统区域设置为中文(简体中国) 查看上一次是什么应用程序唤醒了电脑可以以管理员模式启动命令提示符(CMD),…

什么是vibe ?

这里的 “vibe” 不是指普通的 “氛围”,而是结合 AI 工作场景的一种直观感受,核心是AI 自主、流畅执行任务的 “状态感” 或 “体验感”。 它之所以用 “vibe” 这个偏感性的词,是为了突出和传统方式的差异,具体可…

2025年10月试验箱厂家最新推荐排行榜:氙灯老化试验箱,紫外老化试验箱,冷热冲击试验箱,恒温恒湿试验箱公司推荐!

在工业生产与科研领域,试验箱是验证产品环境适应性、保障质量的关键设备,其性能直接关系到检测数据准确性与研发效率。当前市场上,部分试验箱品牌存在元器件劣质、稳定性差、售后响应慢、功能单一等问题,让企业在选…

AI时代我们需要更多开发者:Shalini Kurapati的技术洞察

在AI已能编写25%代码的今天,Clearbox AI CEO Shalini Kurapati提出我们需要更多而非更少的开发者。她指出AI加速编码的同时也增加了漏洞、偏见和难以追踪的错误风险,强调需要人类专家设计架构、验证输出并构建可靠系…

新一代虚拟助手AI技术挑战赛启动

某中心推出Alexa Prize SimBot挑战赛,旨在通过持续学习、可教导AI、多模态理解和推理等通用AI方法,开发能够协助完成现实世界任务的新一代虚拟助手技术。某中心推出全新Alexa Prize SimBot挑战赛 某中心今日宣布推出…

经典视觉跟踪算法的MATLAB实现

经典视觉跟踪算法的MATLAB实现一、光流法(Lucas-Kanade) 原理:通过像素亮度恒定假设计算相邻帧间的运动矢量场 ​​应用​​:运动目标检测、视频压缩 ​​核心参数​​:窗口大小、金字塔层数、迭代次数 %% 光流法…

CSS各种选择器

选择器选择的是body里的div或者p标签那些 CSS的引入方式: 标签选择器:修改css标签 所有同名标签都会被改变 类选择器: id选择器: 通配符选择器: 复合选择器: 两种找选择器方式都可以