django+drf+vue 简单系统搭建 (3) - 基于类的视图

传统Django中有基于类的视图,Drf中自然也有,目的都是实现功能的模块化继承,封装,减少重复代码。

首先在视图中新增下面代码:

# simpletool/views.pyfrom rest_framework.views import APIView
from simpletool.serializers import ToolDetailSerializer
from django.http import Http404class simpletoolDetail(APIView):def get_object(self,pk):try:return simpleTool.objects.get(pk=pk)except:raise Http404def get(self,request,pk):simpletool = self.get_object(pk)serializer = ToolDetailSerializer(simpletool)return Response(serializer.data)def put(self,request,pk):simpletool = self.get_object(pk)serializer = ToolDetailSerializer(simpletool,data=request.data)# 验证提交的数据是否合法,不合法则返回400if serializer.is_valid():# 序列化器将持有数据反序列化后,保存到数据库中serializer.save()return Response(serializer.data)return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)def delete(self,request,pk):simpletool = self.get_object(pk)simpletool.delete()return Response(status=status.HTTP_204_NO_CONTENT)

上述代码为对tool的获取,修改,删除的3个方法,以及获取单个tool信息的方法,其中get(),put()就是有一部将对象序列化或者反序列化的步骤。

# 序列化这个概念与具体语言无关,python或者javascript对象转化为json都称为序列化,反正为反序列化。

现在来补充ToolDetailSerializer。与simpleTool列表不同,需要返回该工具所有完整的数据信息,所以需要给它新定义一个序列化器:

#simpletool/serializers.py
class ToolDetailSerializer(serializers.ModelSerializer):class Meta:model = simpleToolfields = '__all__'

配置urls.py

#simpletool/urls.py
urlpatterns = [path('',views.tool_list,name='list'),path('<int:pk>/',views.simpletoolDetail.as_view(),name='detail'),
]

httpie 测试

http http://127.0.0.1:8000/api/simpletool/1/

 尝试修改工具名:

 http PUT http://127.0.0.1:8000/api/simpletool/1/ title=test_tool

可以尝试将它删掉

http DELETE http://127.0.0.1:8000/api/simpletool/1/

1. 通用视图

实际上,增删改查为通用操作,所以可以用DRF提供的Mixin类直接集成对应的功能:

修改simpletoolDetail

#simpletool/views.pyfrom rest_framework import mixins
from rest_framework import genericsclass simpletoolDetail(mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView):queryset = simpleTool.objects.all()serializer_class = ToolDetailSerializerdef 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)

我们可以让它更简单:

#simpletool/views.pyclass simpletoolList(generics.ListCreateAPIView):queryset = simpleTool.objects.all()serializer_class = ToolListSerializerclass simpletoolDetail(generics.RetrieveUpdateDestroyAPIView):queryset = simpleTool.objects.all()serializer_class = ToolDetailSerializer

修改urls.py

#simpletool/urls.py
urlpatterns = [path('',views.simpletoolList.as_view(),name='list'),path('<int:pk>/',views.simpletoolDetail.as_view(),name='detail'),
]

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

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

相关文章

Java —— String类

目录 1. String类的重要性 2. 常用方法 2.1 字符串构造 2.2 String对象的比较 2.3 字符串查找 2.4 转化 1. 数值和字符串转化 2. 大小写转换 3. 字符串转数组 4. 格式化 2.5 字符串替换 2.6 字符串拆分 2.7 字符串截取 2.8 其他操作方法 2.9 字符串常量池 2.9.1 创建对象的思考…

selenium下载安装对应的chromedriver并执行

文章目录 selenium对应版本chrome驱动下载114以及之前的chrome版本119/120/121的chrome版本 chromedriver安装执行selenium代码 selenium Selenium是广泛使用的模拟浏览器运行的库&#xff0c;它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中&#xff0c…

Redis 5 种基本数据类型详解

Redis 共有 5 种基本数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 这 5 种数据类型是直接提供给用户使用的&…

VPX 插座(VITA46)介绍及应用 (简单介绍)

1. VPX 插座的介绍 VPX是VITA(VME International Trade Association, VME国际贸易协会)组织于2007年在其VME总线基础上提出的新一代高速串行总线标准。VPX总线的基本规范、机械结构和总线信号等具体内容均在ANSI/VITA46系列技术规范中定义。VPX就是基于高速串行总线的新一代总线…

PyTorch中并行训练的几种方式

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

小诺2.0开源版工程启动

小诺是一款开源的前后端开发框架&#xff0c;同若依、SpringBladex一样可作为私活、外包脚手架。 开源地址&#xff1a;Snowy: 最新&#xff1a;&#x1f496;国内首个国密前后分离快速开发平台&#x1f496;&#xff0c;采用Vue3AntDesignVue3 ViteSpringBootMpHuToolSaToke…

操作系统(三)| 进程管理上 进程状态 同步 互斥

目录 1 进程和程序区别 2 进程状态 2.1 进程的5种基本状态 2.2 进程状态之间转换 2.3 七状态模型 3 进程描述 3.1 进程控制块 PCB 3.2 进程块组织方式 4 进程控制 5 进程同步 互斥 5.1 区分进程互斥和同步 5.2 核心方案 5.3 其他方案 方案1 设置锁变量 方案2 严…

C# 电脑程序控制电路开关

最近在做系统的监控&#xff0c;想到能不能做一个酷点的功能&#xff0c;当收到异常消息时桌面上的红色小灯&#xff08;或报警灯&#xff09;会亮起来。于是在淘宝上找了一下&#xff0c;有这种小设备&#xff0c;插入USB设备&#xff0c;通过串口控制这个设备的继电器来实现&…

中级程序员——vue3+js+git面试题

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;vue3jsgit面试题 文章目录 vue3最大缺点和优点&#xff1f;vue3组合式里面&#xff0c;如何去调用子组件里面的方法&#xff1f;watch和watcheffect有什么区别&#xff1f;计算属性和watch的区别是什…

MySQL数据库系统教程

基础篇 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用…

ArcGIS教程——ArcGIS工具-按线分割面

功能说明 在ArcGIS数据处理过程中&#xff0c;有时需要沿线把面要素分割开&#xff0c;可以使用高级编辑中的分割面&#xff08;Cut Polygon&#xff09;工具。那么&#xff0c;如果要用线图层分割面图层该怎么办呢&#xff1f;地理遥感生态网平台开发了一个自定义模型工具。它…

学习笔记—吴恩达《AI for everyone》

【写在前面】 学习视频来源&#xff1a;B站“GPT中英字幕课程资源”&#xff08;见图片水印&#xff09;。 此文是自学笔记&#xff0c;主要是截图视频课件中的一些知识点&#xff0c;只做自学使用。 一. AI 介绍 二. 机器学习 Machine Learning 三. 什么是数据 What is AI 四…

你知道Linux操作系统的前世今生吗?Linux系统又该如何搭建呢?

文章目录 前言1. Linux 是什么1.1 Unix & Linux 发展历程图1.2 Linux 的发展1.3 Linux 的发行版 2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器 3. 使用终端软件连接到 Linux3.1 什么是终端软件3.2 下载安装 XShell3.3 使用 XShell 登陆主机 总结 前言 可能很多人都…

跳台阶游戏(Python排列组合函数itertools.combinations的应用)

给定台阶总数和两种单次可跳级数&#xff0c;编写自定义函数&#xff0c;计算所有的游戏组合方案数量。 (笔记模板由python脚本于2023年11月19日 19:18:48创建&#xff0c;本篇笔记适合熟悉python自定义函数编写&#xff0c;了解排列组合知识的coder翻阅) 【学习的细节是欢悦的…

多项式求和

题目描述 给定程序中 fun 函数的功能是&#xff1a;求出以下分数序列的前 n 项之和&#xff0c;并通过函数值返回 main 函数。 输入格式 输入参数。 输出格式 计算公式返回的结果。 输入输出样例 输入1 5 输出1 8.391667 python解&#xff1a; def fun(n):a1b2s0for…

mongoDB安装教程

安装及操作命令 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.0.tgz tar -zxvf mongodb-linux-x86_64-3.4.0.tgz#修改文件夹名字为mongodb-3.4.0 mv mongodb-linux-x86_64-3.4.0 mongodb-3.4.0# 在/opt/mongodb-3.4.0/conf目录下创建mongo.co…

设计模式-解析器-笔记

“领域规则”模式 在特定领域中&#xff0c;某些变化虽然频繁&#xff0c;但可以抽象为某种规则。这时候&#xff0c;结合特定领域&#xff0c;将稳日抽象为语法规则&#xff0c;从而给出在该领域下的一般性解决方案。 典型模式&#xff1a;Interpreter 动机(Motivation) 在…

MySQL 运算符二

逻辑运算符 逻辑运算符用来判断表达式的真假。如果表达式是真&#xff0c;结果返回 1。如果表达式是假&#xff0c;结果返回 0。 运算符号作用NOT 或 !逻辑非AND逻辑与OR逻辑或XOR逻辑异或 1、与 mysql> select 2 and 0; --------- | 2 and 0 | --------- | 0 | -…

微信小程序开发学习——顺序、选择、循环、数学函数

1.条件语句 只需在js中写JavaScript的条件语句就行 math对象&#xff1a; 代码如下&#xff1a; <!--pages/tiaojian/tiaojian.wxml--> <view class"box"><view class"title">输入x&#xff0c;条件输出y</view><view><…

俄罗斯网络间谍组织在有针对性的攻击中部署LitterDrifter USB蠕虫

导语 俄罗斯网络间谍组织最近在针对乌克兰实体的攻击中&#xff0c;部署了一种名为LitterDrifter的USB蠕虫。这种蠕虫具有自动传播恶意软件的功能&#xff0c;并与威胁行为者的命令和控制服务器进行通信。该组织被称为Gamaredon&#xff0c;其攻击行动被认为是大规模的&#xf…