RESTAPI简介与DRF使用
RESTAPI
以资源为url,通过不同的请求方式实现不同的行为。
以资源名作为url
POST:增 …/student/
GET:查所有 …/student/
GET:查单个 …/student/<pk>/ 获取id=pk的学生
DELETE:删 …/student/<pk>/
PUT:改全部 …/student/<pk>/
PATCH:改部分 …/student/<pk>/
视图函数
数据从前端传到服务器时,需要反序列化成能存入数据库的数据,同样,数据从数据库取出,需要序列化成可以传给前端的Json数据,drf里的序列化器可以很好地实现序列化与反序列化两个步骤。
1. 序列化器
1. 自己写的序列化器:
设置字段,然后可以设置POST和UPDATE时数据库的操作
class BookSerializers(serializers.Serializer):title = serializers.CharField(max_length=32)price = serializers.IntegerField()pub_date = serializers.DateField()def create(self, validated_data):# 添加数据逻辑new_book = Book.objects.create(**validated_data)return new_bookdef update(self, instance, validated_data):Book.objects.filter(pk=instance.pk).update(**validated_data)updated_book = Book.objects.get(pk=instance.pk)return updated_book
2. 使用ModelSerializer,里面实现了create和update方法
# ModelSerializer 模型序列化器,只需要配置
class BookSerializers(serializers.ModelSerializer):date = serializers.DateField(source='pub_date')class Meta:model = Book#fields = '__all__'exclude = ["pub_date"]
2. 视图函数
1. 继承APIView,自己写get/post/get/put/delete方法
class BookView(APIView):def get(self, request):# 获取所有书籍book_list = Book.objects.all()# 构建序列化器对象serializer = BookSerializers(instance=book_list, many=True)return Response(serializer.data)def post(self, request):serializer = BookSerializers(data=request.data)if serializer.is_valid():# 通过# new_book = Book.objects.create(**serializer.validated_data)serializer.save()return Response(serializer.data)else:# 校验失败return Response(serializer.errors)return Response()class BookDetailView(APIView):def get(self, request, id):book = Book.objects.get(pk=id)serializer = BookSerializers(instance=book, many=False)return Response(serializer.data)def put(self, request, id):update_book = Book.objects.get(pk=id)serializer = BookSerializers(instance=update_book, data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)else:return Response(serializer.errors)def delete(self, request, id):Book.objects.get(pk=id).delete()return Response()
2. 继承GenericAPIView
好像没有什么区别,就是把请求和序列化器在类里声明了,然后使用self.get_serializer来获得序列化器,用get_objetct来获取查询结果。
class PublishDetailView(GenericAPIView):queryset = Publish.objects.all()serializer_class = PublishSerializersdef get(self, request, pk):serializer = self.get_serializer(instance=self.get_object(), many=False)return Response(serializer.data)def put(self, request, pk):serializer = self.get_serializer(instance=self.get_object(), data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)else:return Response(serializer.errors)def delete(self, request, pk):self.get_object().delete()return Response()
3. 继承generic的ListCreateAPIView, RetrieveUpdateDestroyAPIView
查询全体和查询单人需要写两个视图函数
class PublishView(ListCreateAPIView):queryset = Publish.objects.all()serializer_class = PublishSerializersclass PublishDetailView(RetrieveUpdateDestroyAPIView):queryset = Publish.objects.all()serializer_class = PublishSerializers
4. 继承ModelViewSet
一行解决
class AuthorView(ModelViewSet):queryset = Author.objects.all()serializer_class = AuthorSerializers
相关文章:
RESTAPI简介与DRF使用
RESTAPI 以资源为url,通过不同的请求方式实现不同的行为。 以资源名作为url POST:增 …/student/ GET:查所有 …/student/ GET:查单个 …/student/<pk>/ 获取idpk的学生 DELETE:删 …/student/<pk>/ PUT&#…...
深度学习笔记(kaggle课程《Intro to Deep Learning》)
一、什么是深度学习? 深度学习是一种机器学习方法,通过构建和训练深层神经网络来处理和理解数据。它模仿人脑神经系统的工作方式,通过多层次的神经网络结构来学习和提取数据的特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了…...
windows下载任意版本php
zzwindows.php.net - /downloads/releases/archives/ windows下载php,记录一下...
Linux命令
操作系统管理硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用。(作为中间人,连接软件和硬件)不同应用领域的主流操作系统 桌面操作系统 Windows系列::用户群体大 macOS:适合于开发人…...
TDD(测试驱动开发)?
01、前言 很早之前,曾在网络上见到过 TDD 这 3 个大写的英文字母,它是 Test Driven Development 这三个单词的缩写,也就是“测试驱动开发”的意思——听起来很不错的一种理念。 其理念主要是确保两件事: 确保所有的需求都能被照…...
C/C++
const 作用 修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);修饰引用,指向…...
CCF C³ 走进百度:大模型与可持续生态发展
2023年8月10日,由CCF CTO Club发起的第22期C活动在百度北京总部进行,以“AI大语言模型技术与生态发展”主题,50余位企业界、学界专家、研究人员就此进行深入探讨。 CCF C走进百度 本次活动,CCF秘书长唐卫清与百度集团副总裁、深…...
Vue使用html2canvas将DOM节点生成对应的PDF
要通过Vue使用html2canvas将DOM节点生成对应的PDF,您需要安装html2canvas和jspdf这两个库。html2canvas用于将DOM节点转换为Canvas,而jspdf用于将Canvas转换为PDF。以下是一个简单的示例代码,展示了如何使用html2canvas和jspdf生成PDF文件&am…...
专访阿里云席明贤,视频云如何运用大模型与小模型来破茧升级2.0
不久前,LiveVideoStack与阿里云视频云负责人席明贤(花名右贤)展开一场深度的对话,一个是圈内专业的社区媒体,一个是20年的IT老兵,双方有交集、有碰撞、有火花。 面对风云变幻的内外环境,阿里云…...
Vue 2的计算属性与侦听器
计算属性 vs 方法 vs 侦听器 计算属性的出现是为了解决模板内表达式太过复杂而变得难以维护。 假设我们知道长和宽,要计算一个矩形的面积,如果没有计算属性,我们可能像下面这样处理: <div id"app"><input t…...
JavaScript基础:学习JavaScript语言的基本语法和常用操作,了解网页交互的基本原理
JavaScript是一种广泛应用于网页开发中的脚本语言,它可以与HTML和CSS一起使用,实现网页交互及动态效果。 以下是JavaScript的基本语法和常用操作: 变量声明:使用var、let或const关键字声明变量。 var name "John";let …...
网络每日一练
吴泽彬 C Ip 网络层 Tcp udp 传输层, Http 应用层 收起 1 回复 发布于 2019-10-11 12:07 举报 fighting2016 Java A类地址中的私有地址和保留地址: ①10.0.0.0到10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被…...
asp.net core读取request内容
在Startup.cs中定义Middleware,设置缓存Http请求的Body数据。代码如下。自定义Middleware请放到Configure方法的最前面。 app.Use(next > new RequestDelegate(async context > {context.Request.EnableBuffering();await next(context);})); GET请求 HttpC…...
笔记:移植xenomai到nuc972(2)
接下来的测试,出现了两个问题 第一个问题是demo程序启动不了,这是上一篇文章忘记说的事,启动不了的原因是权限问题,提示需要root, 但我是用busybox搭的文件系统,直接就是root,不存在权限问题,所以问题出在应用上,经过一番调试后发现,问题出在xenomai的应用库上,具体位置在xen…...
记忆正则表达式的基本元件
正则常见的三种功能,它们分别是:校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。 正则表达式,简单地说就是描述字符串的规则。在正则中,普通字符表示的还是原来的意思,比如字符 a,…...
低代码是什么?解决哪些问题?什么业务场景适合用低码开发?
目录 一、低代码是什么? 二、低代码解决方案的主要特点 01.可视化开发环境 02.预构建的组件和模板 03.集成的开发和测试工具 04.跨平台兼容性 05.可伸缩性和可扩展性 三、开发工具中的强者 四、你所在企业为什么要关心低代码开发? 五、什么业务场景适…...
SOA架构
SOA架构 Service-Oriented Architecture,SOA是一种软件架构模式,旨在将应用程序的不同功能划分为一组可重用的、自治的、可互操作的服务。 每个服务表示一个特定的业务功能,并通过定义明确的接口和协议来实现与其他服务的通信。 SOA的主要目…...
“深入探索JVM内部机制:解密Java虚拟机“
标题:深入探索JVM内部机制:解密Java虚拟机 摘要:本篇博客将深入剖析Java虚拟机(JVM)的内部机制,包括类加载、内存管理、垃圾回收、即时编译等关键组成部分。通过对JVM内部机制的解密,我们可以更…...
PostgreSQL空值的判断
PostgreSQL空值的判断 空值判断非空判断总结 空值判断 -- 查询为空的 is null,sql简写isnull select * from employees where manager_id isnull;select * from employees where manager_id is null;非空判断 -- 查询不为空的 is not null;sql简写notnull select * from empl…...
使用phpunit进行单元测试
使用phpunit进行单元测试 本教程假定您使用 PHP 8.1 或 PHP 8.2。您将学习如何编写简单的单元测试以及如何下载和运行 PHPUnit. PHPUnit 10 的文档 在这。 下载:可以用以下2种方法之一: 1.PHP 存档 (PHAR) 我们分发了一个 PHP存档(PHAR&…...
中小团队如何利用Taotoken统一管理多个项目的AI调用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小团队如何利用Taotoken统一管理多个项目的AI调用成本 对于同时推进多个AI应用开发项目的中小型技术团队而言,管理分…...
Fulling框架:构建完整AI智能体的工程化实践指南
1. 项目概述:从“FullAgent”到“Fulling”的智能体进化之路最近在开源社区里,一个名为“Fulling”的项目引起了我的注意。它隶属于“FullAgent”这个组织,名字本身就很有意思。“Fulling”这个词,在英语里有“使…丰满、充实”的…...
终极Windows右键菜单管理神器:ContextMenuManager让你的桌面效率提升300%
终极Windows右键菜单管理神器:ContextMenuManager让你的桌面效率提升300% 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾经在Windows右键菜…...
NodeMCU固件烧录终极指南:告别命令行,5分钟搞定ESP8266刷机!
NodeMCU固件烧录终极指南:告别命令行,5分钟搞定ESP8266刷机! 【免费下载链接】nodemcu-pyflasher Self-contained NodeMCU flasher with GUI based on esptool.py and wxPython. 项目地址: https://gitcode.com/gh_mirrors/no/nodemcu-pyfl…...
开源与闭源软件质量对比:工程实践与激励机制才是关键
1. 开源与闭源软件质量之争:一场被误解的辩论最近和几位同行聊起软件质量的话题,不出所料,讨论很快又滑向了那个经典的对立:开源软件和闭源(或称专有)软件,到底谁的质量更好?场面一度…...
求职、谈合作、防踩坑:天眼查、企信宝、企查查,普通人到底该用哪个?
求职、谈合作、防踩坑:三大企业信息平台实战评测指南 在信息爆炸的时代,无论是求职面试、商务合作还是个人投资,提前了解企业背景已成为现代人的必备技能。天眼查、企信宝、企查查三大平台凭借海量企业数据,成为普通人获取商业情报…...
ARM调试状态与Halting Step机制详解
1. ARM调试状态机制深度解析在嵌入式系统开发中,调试功能的重要性不言而喻。ARM架构提供了一套完整的调试机制,其中调试状态(Debug State)是核心组成部分。当处理器进入调试状态时,会暂停正常程序执行,将控…...
5分钟快速上手:qmcdump免费解密QQ音乐文件的终极指南
5分钟快速上手:qmcdump免费解密QQ音乐文件的终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...
POTS与VoIP技术演进:从电路交换到分组交换的可靠性之争与实战指南
1. 项目概述:当技术演进遭遇“顽固”的用户体验作为一名在通信行业摸爬滚打了十几年的工程师,我最近读到一篇2015年的老文章,标题挺有意思,叫《给POTS(普通老式电话服务)的心脏钉上木桩?》。作者…...
基于PanoSim5.0虚拟仿真平台的自主代客泊车AVP系统开发教程
1. PanoSim5.0与AVP系统开发入门指南 第一次接触PanoSim5.0时,我和大多数开发者一样被它丰富的功能模块震撼到了。这个国产仿真平台不仅支持高精度的车辆动力学建模,还能实现逼真的传感器仿真和环境渲染。对于自主代客泊车(AVP)这种需要反复测试的场景来…...
