ModelSerializer 使用知识点_序列化和反序列化用法区别
1、ModelSerializer 如下
from api_test.errorCode.errorCode import Status
class RelatedbSerializer(serializers.ModelSerializer):
"""
关联数据库返回JSON参数序列化
"""
globalHost = serializers.CharField() class Meta:
model = HostRelateDB
fields = ('id', 'globalHost', 'relateDB_name', 'db_host', 'db_username', 'db_pwd', 'db_port') def validate_globalHost(self, globalHost):
if globalHost:
globalHost = int(globalHost) if globalHost.isdigit() else globalHost
if not isinstance(globalHost, int):
raise serializers.ValidationError("PARAM_NOT_INT")
try:
global_host_obj = GlobalHost.objects.get(id=globalHost)
except ObjectDoesNotExist:
raise serializers.ValidationError("NOT_FOUND")
else:
raise serializers.ValidationError("PARAM_IS_NULL") return globalHost 2、序列化用法如下,新增数据
data = JSONParser().parse(request)
serialze = RelatedbSerializer(data=data) #序列化,将json数据传入ModelSerializer
if serialze.is_valid():
global_host_obj = GlobalHost.objects.get(id=data["globalHost"])
serialze.save(globalHost=global_host_obj)
return JsonResponse(code=Status.SUCCESS.get_code(), msg=Status.SUCCESS.get_msg(),data=serialze.data) 3、反序列化用法如下,查询数据
globalHost_id = request.GET.get("globalHost")
try:
page_size = int(request.GET.get("page_size", 20))
page = int(request.GET.get("page", 1))
except (TypeError, ValueError):
return JsonResponse(code="999985", msg="page and page_size must be integer!")
if not globalHost_id.isdecimal():
return JsonResponse(code="999996", msg="参数有误!")
try:
GlobalHost.objects.get(id=globalHost_id)
except ObjectDoesNotExist:
return JsonResponse(code="999995", msg="相关host不存在!")
try:
relateDBObj = HostRelateDB.objects.filter(globalHost_id=globalHost_id)
paginator = Paginator(relateDBObj, page_size) # paginator对象
total = paginator.num_pages # 总页数
try:
obm = paginator.page(page)
except PageNotAnInteger:
obm = paginator.page(1)
except EmptyPage:
obm = paginator.page(paginator.num_pages)
serializer = RelatedbSerializer(obm, many=True) # 反序列化,将查询到的model对象传入ModelSerializer
return JsonResponse(data={"data": serializer.data,
"page": page,
"total": total
}, code="999999", msg="成功")
4、反序列化对单个对象和列表对象序列化的区别
3中是对多个对象的序列化,单个序列化如下
try:
obj = AutomationTestTaskSerializer(AutomationTestTask.objects.get(project=project_id)) # 使用get方法取单个对象
print("obj:",obj)
return JsonResponse(code="999999", msg="成功!", data=obj.data)
except ObjectDoesNotExist:
print("ObjectDoesNotExist:")
return JsonResponse(code="999999", msg="成功!")
ModelSerializer 使用知识点_序列化和反序列化用法区别的更多相关文章
- C#中的序列化与反序列化
眼看XX鸟的课程关于C#的知识点就要学完了,翻看网络中流传的教程还是发现了一个课程中没有讲到的知识点:序列化与反序列化 无奈还是了解一下并操作一番,以备后用吧 介绍:就是将对象信息转化为二进制信息以便 ...
- 【Java基础】序列化与反序列化深入分析
一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...
- Json数据的序列化与反序列化的三种经常用法介绍
下面内容是本作者从官网中看对应的教程后所做的demo.其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方.. 还请各位读者批判性对待... 本文主要介绍在Json数据的序列化 ...
- DRF框架(三)——media资源路径设置、多表设计复习及补充、序列化组件(ModelSerializer)操作多表(序列化与反序列化)、多表序列化与反序列化整合(重点)
media资源路径设置 (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/me ...
- ModelSerializer,序列化与反序列化整合
复习 """ 1.解析模块:全局局部配置 REST_FRAMEWORK = { # 全局解析类配置 'DEFAULT_PARSER_CLASSES': [ 'rest_f ...
- Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串
原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法
Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...
- java ->IO流_序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流(对象 ...
随机推荐
- Linux系统搭建并管理Git服务器
搭建Git服务器 GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓 ...
- 2015沈阳区域赛Meeting(最短路 + 建图)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 洛谷P1600 天天爱跑步——题解
题目传送 首先要考虑入手点.先考虑一个一个玩家处理,显然不加优化的话,时间复杂度是O(n)的.发现对于玩家路径上的点都有一个观察员,一个都不能忽视,看起来是很难优化了.在做题时,发现一个思路很难想,就 ...
- python3 enum模块的应用
python枚举模块的学习 ps:小编刚开始学习没多久,部分资源来源于其他网友,如有出错,麻烦联系修改哈,互帮互助,共同进步 一.枚举与字典类型 字典类型的缺点:1.值可变 2.没有防止相同标签的功能 ...
- Jade学习(四)之结合node如何编译执行
1.首先安装node 2.新建一个文件夹并进入该文件夹 3.安装jade 4.在新建的文件夹下新建js文件,写nodejs代码 5.在vscode中利用插件code runner直接执行js文件,输出 ...
- localStorage 理解
localStorage对象是HTML5的客户端存储持久化数据的方案.为了能访问到同一个localStorage对象,页面必须来自同一个域名(子域名无效),使用同一种协议,在同一个端口上. 过期策略: ...
- JavaSE基础:泛型
泛型 1.引入 情景模式描述,假设完成一个学生的成绩的情况: 整数: math=80,english=70 小数: math=85.6,englisth=77.8 字符串: math="66 ...
- java.lang.IllegalArgumentException: id to load is required for loading
java.lang.IllegalArgumentException: id to load is required for loading at org.hibernate.event.LoadEv ...
- Xcode中常用的快捷键(原文链接http://www.cocoachina.com/ios/20141224/10752.html)
Xcode导航快捷键 1.工程导航器:Command+1 快速浏览代码.图片以及用户界面文件. 2.显示/隐藏导航器面板:Command+0 当你在对屏幕进行截图的时候可能会想要隐藏起与你感兴趣内容的 ...
- Delphi 对象观察器