【django framework】ModelSerializer+GenericAPIView接口数据流

news2024/12/23 0:38:08

GenericAPIView数据从序列化到最终返回响应的数据流

// 以ModelSerializer+generics.CreateAPIView为例

程序终归是为了处理数据,怎么处理,以怎样的顺序和方法去处理,就涉及到了具体的业务流程。当我们是用了一个牛掰的框架,发现原来熟悉的方法不见了,取而代之的是不断地重写或复用已有的方法,但要想知道什么时候应该去复用谁,什么时候应该去重写谁,就必须要清楚数据在各模块方法间的传递顺序,即数据流。


在这里插入图片描述


目录

  • GenericAPIView数据从序列化到最终返回响应的数据流
  • // 以ModelSerializer+generics.CreateAPIView为例
  • 1 数据从 Serializer 传递到 generics.CreateAPIView再到最终提交到数据库经历的几个过程
    • 1.1 数据反序列化
    • 1.2 数据验证(Validation)
    • 1.3 创建实例(Instance Creation)
    • 1.4 数据保存(Data Saving)
    • 1.5 返回响应(Response)
  • 2 同时重写perform_create和create方法时


1 数据从 Serializer 传递到 generics.CreateAPIView再到最终提交到数据库经历的几个过程

从 Serializer 到 generics.CreateAPIView 再到数据库的数据流包括了数据的反序列化、数据验证、实例创建、持久化、返回响应这几个过程。

1.1 数据反序列化

前端调用接口,给到后端的是JSON/XML结构的数据,这类数据本质是字符串,无法被后端代码直接使用,所以要将字符串变成python对象,这个过程叫做反序列化。反之,则为序列化。
这一步是透明的,通常不需要做处理。

1.2 数据验证(Validation)

一旦数据被反序列化,Serializer 将会对数据进行验证。这意味着它会检查数据是否符合您在 Serializer 类中定义的模型字段的规则,例如字段类型、长度限制、唯一性等等。如果数据验证失败,Serializer 将会抛出验证错误。
这一步可以:

  • 可以用validate方法自定义验证方式,可以校验一些特殊的字段,比如电话号码等等
  • 可以重写Serializer的create方法,从而修改或添加一些必要的字段

1.3 创建实例(Instance Creation)

如果数据通过了验证,generics.CreateAPIView 的 create() 方法将被调用。在该方法内部,会使用验证后的数据创建模型实例。通常,您会使用 serializer.save() 方法来创建模型实例,该方法会返回已经保存到数据库的实例对象。
这一步可以:

  • 可以重写perform_create方法,在正式提交到数据库之前,对一些字段做修改

1.4 数据保存(Data Saving)

perform_create中,会调用serializer.save() 方法来创建模型实例,一旦实例被创建,save() 方法会将实例保存到数据库中。这通常会触发数据库操作,如 INSERT 查询,将数据持久化存储到数据库中。

1.5 返回响应(Response)

数据保存成功后,create() 方法会返回一个 HTTP 响应,通常是成功创建对象的响应,包含新创建的对象的数据。
这一步可以:

  • 可以重写create方法,可以自定义返回值。

2 同时重写perform_create和create方法时

在 generics.CreateAPIView 中,数据首先到达 perform_create() 方法,然后再到达 create() 方法。同时重写了这两个方法,数据流并没有发生变化,这两个方法的作用也没有发生变化。
依然是perform_create用来保存实例到数据库,create则返回响应结果。
可以根据实际情况来重写这两个方法。


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

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

相关文章

uniapp 写安卓app,运行到手机端 调试

手机 设置》关于手机》点击版本号 4-5次,弹出手机锁屏页面,输入手机锁屏密码 2.手机 设置中 》搜索 开发人员选项 》 调试》打开USB调试 同页面 找到 选择USB配置》选择 MIDIhbuilder 编辑器 点击 》运行》运行到手机或模拟器》运行到Android App基座 》…

Linux内存管理--系列文章貮

接上文,用户态写完,本章写内核态内存空间。 3.2内核态内存 大家会发现用户态空间不管32还是64位,这种内存分布是相差不大的。是因为使用虚拟内存的系统,会让应用程序感到和别的程序是相互独立的,互不干扰&#xff0c…

网络编程套接字——实现简单的UDP网络程序

目录 1、预备知识 1.1、认识端口号 1.2、端口号 vs 进程pid 1.3、认识TCP协议 1.4、认识UDP协议 1.5、网络字节序 2、socket编程接口 2.1、socket常见API 2.2、sockaddr结构 3、实现一个简易的UDP服务器和客户端通信 log.hpp UdpServer.hpp UdpClient.cc Main.cc…

pytorch CV入门 - 汇总

初次编辑:2024/2/14;最后编辑:2024/3/9 参考网站-微软教程:https://learn.microsoft.com/en-us/training/modules/intro-computer-vision-pytorch 更多的内容可以参考本作者其他专栏: Pytorch基础:https…

力扣热题100_矩阵_240_搜索二维矩阵 II

文章目录 题目链接解题思路解题代码 题目链接 240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1: 输入&#xf…

计算机网络 |内网穿透

其实内网穿透,也挺好玩的,如果在大学的时候,那个时候讲计算机网络的老师能横向延展,估计课也会更有趣不少,本来计算机网络这门课就是计算机课程中可玩性最搞的。 只能说,怪可惜的 回到正题,内网…

提高安全投资回报:威胁建模和OPEN FAIR™风险分析

对大多数人和企业来说,安全意味着一种成本。但重要的是如何获得适合的量,而不是越多越好。然而,你如何决定什么时候可以有足够的安全性,以及你如何获得它?则完全是另一回事。 该篇文章是由The Open Group安全论坛主办&…

k8s之图形界面DashBoard【九】

文章目录 9. DashBoard9.1 部署Dashboard9.2 使用DashBoard 镇场 9. DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。其实,为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard&…

leetcode 热题 100_环形链表 II

题解一: 哈希表:遍历链表,用哈希表存储遍历过的链表节点,判断链表节点是否在哈希表中存在,如果存在说明链表出现过,第一个重复出现的节点即为开始入环的第一个节点。 import java.util.HashSet;public cla…

第八阶段:uni-app小程序 --首页开发(2)

一:分析页面布局 1.1: 功能 搜索框: 轮播图: 分类的导航区: 楼层区: 二: 利用命令创建home分支 git branch git checkout -b home git branch 三: 配置网络请求(main.js 入口函数&#x…

python问题:vscode切换环境,pip安装库网络错误

python问题:vscode切换环境,pip安装库网络错误 vscode切换环境pip安装库网络错误 记录一下遇见的python问题。 vscode切换环境 在vscode上面的搜索框输入 > select interpreter然后选择需要的环境。 pip安装库网络错误 用requirements.txt来安装…

CentOS部署 JavaWeb 实现 MySql业务

一、项目打war包 在eclispe或idea中找到项目,右键打war包。 二、上传项目到linux 2.1云服务器虚拟机均可 以tomcat为例 /usr/local/tomcat/webapps 将war包通过ssh连接上传到webapps目录下。 如果是root目录则不需要项目名即 ip或域名端口直接访问&#xff08…

linux下重启ORACLE

切换到oracle用户 su - oracle 登录oracle sqlplus / as sysdba 启动数据库 startup 退出数据库 exit 启动监听 lsnrctl start FINISH

Docker使用(二)Docker安装和常见典型操作

Docker使用(二)Docker安装和常见典型操作 二、软件安装 1、Docker安装 (1)环境准备 [rootlocalhost ~]# uname -r 3.10.0-327.el7.x86_64 # cat /etc/os-release (2)卸载旧版本 $ sudo yum remove docker \ ​ docker-cli…

OpenCV4.9.0开源计算机视觉库在 Linux 中安装

返回目录:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 环境变量参考 下一篇:将OpenCV与gcc和CMake结合使用 引言: OpenCV是一个开源的计算机视觉库,由英特尔公司所赞助。它是一个跨…

KBP210-ASEMI新能源专用整流桥KBP210

编辑:ll KBP210-ASEMI新能源专用整流桥KBP210 型号:KBP210 品牌:ASEMI 封装:KBP-4 正向电流(Id):2A 反向耐压(VRRM):1000V 正向浪涌电流:6…

SpingBoot集成Rabbitmq及Docker部署

文章目录 介绍RabbitMQ的特点Rabbitmq术语消息发布接收流程 Docker部署管理界面说明Overview: 这个页面显示了RabbitMQ服务器的一般信息,例如集群节点的名字、状态、运行时间等。Connections: 在这里,可以查看、管理和关闭当前所有的TCP连接。Channels: …

#QT(定时轮播电子相册)

1.IDE:QTCreator 2.实验: (1)使用QOBJECT的TIMER (2)EVENT时间 (3)多定时器定时溢出判断 (4)QLABEL填充图片 3.记录 4.代码 widget.h #ifndef WIDGET_H…

数星星 刷题笔记 (树状数组)

依题意 要求每个点 x, y 的左下方有多少个星星 又因为 是按照y从小到大 给出的 所以 我们在计算个数的时候是按照y一层层变大来遍历的 因此我们在处理每一个点的时候 只需要看一下 当前的点有多少个点的x值比当前点小即可 树状数组的 操作模板 P3374 【模板】树…

R语言实现中介分析(1)

中介分析,也称为介导分析,是统计学中的一种方法,它用于评估一个或多个中介变量(也称为中间变量)在自变量和因变量之间关系中所起的作用。换句话说,中介分析用于探索自变量如何通过中介变量影响因变量的机制…