Django--ApiView示例

1. 代码示例

from django.contrib.auth.models import User
from rest_framework import serializers
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import statusfrom .models import BookInfoclass BookInfoModelSerializer(serializers.ModelSerializer):class Meta:model = BookInfofields = '__all__'class BookListView(APIView):def get(self, request):books = BookInfo.objects.all()serializer = BookInfoModelSerializer(books, many=True)return Response(serializer.data)def post(self, request):serializer = BookInfoModelSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)class BookDetailView(APIView):def get(self, request, pk):try:book = BookInfo.objects.get(pk=pk)serializer = BookInfoModelSerializer(book)return Response(serializer.data)except BookInfo.DoesNotExist:return Response(status=status.HTTP_404_NOT_FOUND)def put(self, request, pk):try:book = BookInfo.objects.get(pk=pk)serializer = BookInfoModelSerializer(book, data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)except BookInfo.DoesNotExist:return Response(status=status.HTTP_404_NOT_FOUND)def delete(self, request, pk):try:book = BookInfo.objects.get(pk=pk)book.delete()return Response(status=status.HTTP_204_NO_CONTENT)except BookInfo.DoesNotExist:return Response(status=status.HTTP_404_NOT_FOUND)

2. 代码详解

详细解释

这段代码是一个使用 APIView 构建 API 视图的示例,它可以用于构建 RESTful API。

1. 导入模块

  • from django.contrib.auth.models import User: 导入 User 模型,用于用户身份验证。
  • from rest_framework import serializers: 导入序列化器模块,用于将模型实例转换为可序列化的数据格式。
  • from rest_framework.views import APIView: 导入 APIView 基类,用于构建 API 视图。
  • from rest_framework.response import Response: 导入 Response 类,用于生成 HTTP 响应。
  • from rest_framework import status: 导入 HTTP 响应状态码。
  • from .models import BookInfo: 导入 BookInfo 模型,用于定义书籍信息。

2. 定义序列化器

  • class BookInfoModelSerializer(serializers.ModelSerializer): 定义一个名为 BookInfoModelSerializer 的序列化器类,用于序列化和反序列化 BookInfo 模型实例。
  • class Meta: 元类,用于配置序列化器类的属性。
  • model = BookInfo: 要序列化的模型类。
  • fields = '__all__': 要序列化的字段列表。默认情况下,fields 属性设置为 '__all__',表示序列化所有字段。也可以将 fields 属性设置为一个字段列表,以只序列化指定的字段。

3. 定义 API 视图

  • class BookListView(APIView): 定义一个名为 BookListView 的 API 视图,用于获取所有书籍信息。
  • def get(self, request): 定义 get 方法,用于处理 GET 请求。
  • books = BookInfo.objects.all(): 查询所有 BookInfo 对象。
  • serializer = BookInfoModelSerializer(books, many=True): 使用 BookInfoModelSerializer 序列化所有书籍信息,并设置 many=True 参数,表示序列化多个对象。
  • return Response(serializer.data): 返回一个包含序列化数据的响应。

4. 创建新的书籍信息

  • def post(self, request): 定义 post 方法,用于处理 POST 请求。
  • serializer = BookInfoModelSerializer(data=request.data): 使用 BookInfoModelSerializer 验证请求数据。
  • if serializer.is_valid(): 如果数据有效,则保存数据。
  • serializer.save(): 保存数据。
  • return Response(serializer.data, status=status.HTTP_201_CREATED): 返回一个包含序列化数据的响应,并设置状态码为 201(已创建)。
  • return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST): 如果数据无效,则返回一个包含错误信息的响应,并设置状态码为 400(错误请求)。

5. 获取单个书籍信息

  • class BookDetailView(APIView): 定义一个名为 BookDetailView 的 API 视图,用于获取、更新和删除单个书籍信息。
  • def get(self, request, pk): 定义 get 方法,用于处理 GET 请求,并接受一个 pk 参数,表示要获取的书籍的 ID。
  • try: 尝试查询指定 pkBookInfo 对象。
  • book = BookInfo.objects.get(pk=pk): 查询指定 pkBookInfo 对象。
  • serializer = BookInfoModelSerializer(book): 使用 BookInfoModelSerializer 序列化书籍信息。
  • return Response(serializer.data): 返回一个包含序列化数据的响应。
  • except BookInfo.DoesNotExist: 如果书籍不存在,则返回一个 404(未找到)响应。

6. 更新单个书籍信息

  • def put(self, request, pk): 定义 put 方法,用于处理 PUT 请求,并接受一个 pk 参数,表示要更新的书籍的 ID。
  • try: 尝试查询指定 pkBookInfo 对象。
  • book = BookInfo.objects.get(pk=pk): 查询指定 pkBookInfo 对象。
  • serializer = BookInfoModelSerializer(book, data=request.data): 使用 BookInfoModelSerializer 验证请求数据,并使用 book 对象作为初始数据。
  • if serializer.is_valid(): 如果数据有效,则更新数据。
  • serializer.save(): 更新数据。
  • return Response(serializer.data): 返回一个包含序列化数据的响应。
  • return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST): 如果数据无效,则返回一个包含错误信息的响应,并设置状态码为 400(错误请求)。
  • except BookInfo.DoesNotExist: 如果书籍不存在,则返回一个 404(未找到)响应。

7. 删除单个书籍信息

  • def delete(self, request, pk): 定义 delete 方法,用于处理 DELETE 请求,并接受一个 pk 参数,表示要删除的书籍的 ID。
  • try: 尝试查询指定 pkBookInfo 对象。
  • book = BookInfo.objects.get(pk=pk): 查询指定 pkBookInfo 对象。
  • book.delete(): 删除书籍信息。
  • return Response(status=status.HTTP_204_NO_CONTENT): 返回一个 204(无内容)响应,表示书籍已删除。
  • except BookInfo.DoesNotExist: 如果书籍不存在,则返回一个 404(未找到)响应。

总结

这段代码是一个使用 APIView 构建 API 视图的示例,它可以用于构建 RESTful API。它包括以下功能:

  • 获取所有书籍信息
  • 创建新的书籍信息
  • 获取单个书籍信息
  • 更新单个书籍信息
  • 删除单个书籍信息

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

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

相关文章

linux下的openssh简介(centos 8)

目录 1. 简介2. 安装 OpenSSH3. 配置 OpenSSH 服务器3.1 服务器配置文件配置文件的详解 3.2 安全操作——修改 SSH 端口3.3 安全操作——禁止 root 登录3.4 安全操作——密钥认证3.5 安全操作——禁止密码认证 4. 配置 OpenSSH 客户端4.0 常用命令4.0.1 ssh常用命令4.0.2 scp常…

Java进阶学习笔记11——多态

什么是多态? 多态是在继承/实现情况下一种现象,表现为:对象多态和行为多态。 同一个对象,在不同时刻表现出来的不同形态。 多态的前提: 要有继承/实现关系 要有方法的重写 要有父类引用指向子类对象。 多态的具体代码…

使用 LangFuse 意外被挂马!我是怎么恢复系统稳定的?

在使用 LangFuse 过程中,被意外挂马!通过一番折腾服务恢复正常~ 本文将详细介绍应对恶意脚本和进程的完整方案,包括识别、清理、恢复和预防步骤。 阿里云扫到的信息 被执行的 Base64 SUlaQnRTCmV4ZWMgJj4vZGV2L251bGwKSUhDa0hQbmQ9Li8uJChkYXRlfG1kNXN1bXxoZWFkIC1jMjApCl…

Value-Based Reinforcement Learning(1)

Action-Value Functions Discounted Return(未来的reward,由于未来存在不确定性,所以未来的reward 要乘以进行打折) 这里的依赖actions ,和states 这里 Policy Function : ,表达了action的随机性 S…

创新实训2024.05.26日志:服务端接口实现——用户开启多个会话

1. 概念图 类似于Kimi,文心一言,chatGPT等市面上主流的大模型,我们的大模型也支持同一个用户的多个会话,并且提供支持联系上下文给出解答的能力。 2. 基于会话的对话 在langchain chatchat这个对langchain框架进行二次封装的第三…

vulnhub靶场之FunBox-8

一.环境搭建 1.靶场描述 Its a box for beginners and can be pwned in the lunch break. This works better with VirtualBox rather than VMware 2.靶场下载 Funbox: Lunchbreaker ~ VulnHub 3.靶场启动 二.信息收集 1.寻找靶场真实IP地址 nmap -sP 192.168.2.0/24 arp-…

介绍一下Lumina-T2X在哪些领域有应用

接上文【文末附gpt升级方案】Lumina-T2X:大型扩散DiTs在多模态内容生成中的新篇章-CSDN博客 Lumina-T2X是一个创新的多模态内容生成模型,其应用领域广泛,特别是在需要生成多种类型媒体内容的应用场景中表现突出。以下是Lumina-T2X在主要领域…

[AIGC] 什么是flink sql

Apache Flink 是一个针对流数据和批数据的开源平台。Flink SQL 是 Flink 中的一个模块,它允许我们使用 SQL 语言来进行流处理和批处理,极大地简化了大数据处理的复杂度。 Flink SQL API 支持标准的 SQL 语言,包括 DDL(用于定义数…

vue中实现动态点击事件名

//首先是一个数组列表 data() {return {operationList: [{icon: ../../static/shebei.png,name: 全部设备,click: allDevice}, {icon: ../../static/guankong.png,name: 管控中,click: allDevice}, {icon: ../../static/lixian.png,name: 离线设备,click: allDevice}, {icon: .…

列紧性推出紧性的证明

参考中科大大佬笔记 http://home.ustc.edu.cn/~xuxuayame/documents/MAB3/Lec8.pdf 这个证明还是比较经典的,要用到两个引理 度量空间上 紧和列紧等价 紧推出列紧一直都是可以的 但度量空间才能满足列紧推出紧 紧和列紧看上去毫不相关,因此紧推列紧主要…

html中被忽略的简单标签

1&#xff1a; alt的作用是在图片不能显示时的提示信息 <img src"https://img.xunfei.cn/mall/dev/ifly-mall-vip- service/business/vip/common/202404071019208761.jp" alt"提示信息" width"100px" height"100px" /> 2&#…

嵌入式进阶——震动马达

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 原理图控制分析功能设计 原理图 控制分析 S8050 NPN三极管特性 NPN型三极管的工作原理是基于PN结和PNP型晶体管的工作原理。 当外…

PyTorch设计哲学

原文&#xff1a; https://pytorch.org/docs/stable/community/design.html PyTorch设计哲学总结 设计原则 可用性优先于性能 &#xff08;usability over everything else&#xff09; PyTorch的主要目标是可用性&#xff0c;次要目标是合理的性能。避免过早实施严格的用户…

【qt】QTreeWidget 树形组件

QTreeWidget 树形组件 一.什么是树形组件二.界面设计树形组件三.代码实现1.清空2.设置列数3.设置头标签4.添加根目录①QTreeWidgetitem②设置文本③设置图标④添加为顶层目录 5.添加子目录①初始化为父目录②子目录添加到父目录③获取到子目录 四.插入目录1.获取当前选中目录项…

部署PIM-SM

拓扑图 配置 使能组播路由 配置OSPF 组播路由器接口配置pim-sm 连接组成员的接口使能igmp pim路由器上配置静态RP sysname AR1 # multicast routing-enable # interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.0 pim sm # interface GigabitEthernet0/0/…

flutter项目运行报错Exception: Gradle task assembleDebug failed with exit code 1各种报错合集

1.报错 Launching lib/main.dart on sdk gphone64 arm64 in debug mode... Running Gradle task assembleDebug... Exception in thread "main" java.net.ConnectException: Operation timed out at java.base/sun.nio.ch.Net.connect0(Native Method) at j…

云动态摘要 2024-05-26

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]大模型知识引擎体验招募 腾讯云 2024-05-21 大模型知识引擎产品全新上线&#xff0c;为回馈新老客户&#xff0c;50万token免费送&#xff0c;开通服务即领取&#xff01; 云服…

【学习心得】回归任务的评估指标决定系数R^2

一、决定系数是什么&#xff1f; scikit-learn库在进行回归任务的时候&#xff0c;进行模型评估时的score()方法&#xff0c;默认采取的是计算的是决定系数&#xff08;Coefficient of Determination&#xff09;&#xff0c;通常表示为得分。这个值衡量了模型预测值与实际观测…

Vue3实时检测的录音功能

如果有人声并且大于20db&#xff0c;则开始录制。低于20db超过4秒&#xff0c;停止录制 语音实时检测 <template><div class"auto-recorder"><canvas ref"canvas"></canvas><button click"toggleRecording" :disable…