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 使用知识点_序列化和反序列化用法区别的更多相关文章

  1. C#中的序列化与反序列化

    眼看XX鸟的课程关于C#的知识点就要学完了,翻看网络中流传的教程还是发现了一个课程中没有讲到的知识点:序列化与反序列化 无奈还是了解一下并操作一番,以备后用吧 介绍:就是将对象信息转化为二进制信息以便 ...

  2. 【Java基础】序列化与反序列化深入分析

    一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...

  3. Json数据的序列化与反序列化的三种经常用法介绍

    下面内容是本作者从官网中看对应的教程后所做的demo.其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方.. 还请各位读者批判性对待... 本文主要介绍在Json数据的序列化 ...

  4. DRF框架(三)——media资源路径设置、多表设计复习及补充、序列化组件(ModelSerializer)操作多表(序列化与反序列化)、多表序列化与反序列化整合(重点)

    media资源路径设置  (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/me ...

  5. ModelSerializer,序列化与反序列化整合

    复习 """ 1.解析模块:全局局部配置 REST_FRAMEWORK = { # 全局解析类配置 'DEFAULT_PARSER_CLASSES': [ 'rest_f ...

  6. Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...

  7. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  8. JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  9. java ->IO流_序列化流与反序列化流

    序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流(对象 ...

随机推荐

  1. 小记------查看‘阿里云机器’yarn 日志

    通过ip:8088 页面 复制正在运行的application ID    在linux客户端执行 xshell yarn logs -applicationId application_155869 ...

  2. 修建泳池&最大子矩阵

    [题目描述] 夏天到了,学校打算在教学楼后面的空地上挖一个泳池供大家使用. 经过实地勘察,这块土地可以划分成N 行M 列的方格,有的方格是树,有的方格是空地.现在要找一块最大的矩形空地修建泳池,请问泳 ...

  3. yii框架製作簡易RBAC權限管理

    控制器源碼 <?php namespace app\controllers; use yii; use yii\web\Controller; class PowerController ext ...

  4. redis 小结三-数据类型

    redis 的数据类型主要有五种 字符串(String) 哈希表(Hash) 列表(List) 集合(Set ) 有序集合(Sorted Set) 1. 字符串 一个 key 对应一个 value 该 ...

  5. 双连通分量(点-双连通分量&边-双连通分量)

    概念: 双连通分量有点双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图. 一个无向图中的每一个极大点(边)双连 ...

  6. RabbitMQ入门教程(十二):消息确认Ack

    原文:RabbitMQ入门教程(十二):消息确认Ack 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csd ...

  7. go依赖包管理工具vendor基础

    go依赖包管理工具vendor基础 vendor是go的依赖包管理工具,主要用于管理项目中使用到的一些依赖. 它将项目依赖的包,特指外部包,复制到当前工程下的vendor目录下,这样go build的 ...

  8. java中<<,>>和>>>的含义

    <<,>>,>>>为java中的移位运算符. <<表示左移运算符 例如8<<2,表示将8向左移2位,结果为32.低位补0. 二进制演算 ...

  9. python模块导入总结

    python模块导入总结 模块导入方式 定义test.py模块 def print_func(): print("hello") import 语句 导入模块语法 import m ...

  10. oracle获取年、月、日

    --获取年 select extract(year from date'2011-05-17') year from dual; --获取月 select extract(month from dat ...