django序列化serializers过程解析


Posted in Python onDecember 14, 2019

这篇文章主要介绍了django序列化serializers过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

DRF的核心 就是 前后端分离的核心

前后端分离开发的核心:

  • 将模型转换为json 称之为 序列化
  • 将json转换为模型 称之为 反序列化

Django的序列化工具让你可以将Django的模型‘翻译'成其它格式的数据。通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程。

序列化数据

Django为我们提供了一个强大的序列化工具serializers。使用它也很简单,如下所示:

from django.core import serializers
data = serializers.serialize("xml", SomeModel.objects.all())
data = serializers.serialize("json", Author.objects.all())
print(data)

[{"model": "index.author", "pk": 1, "fields": {"name": "pfeiliu", "age": 19, "email": "789@163.com", "isActive": false}}, {"model": "index.author", "pk": 5, "fields": {"name": "lao wei", "age": 18, "email": "123@qq.com", "isActive": true}}, {"model": "index.author", "pk": 6, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 7, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 8, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 9, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 10, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 11, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 12, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 13, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 14, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}]

首先,从djang.core导入它,然后调用它的serialize方法,这个方法至少接收两个参数,第一个是你要序列化成为的数据格式,这里是‘xml',第二个是要序列化的数据对象,数据通常是ORM模型的QuerySet,一个可迭代的对象。

就是这么简单!!

序列化指定字段

如果你不想序列化模型对象所有字段的内容,只想序列化某些指定的字段,可以使用fields参数,如下所示:

from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
data = serializers.serialize("json", Author.objects.all(),fields=('name','age'))
print(data)

[{"model": "index.author", "pk": 1, "fields": {"name": "pfeiliu", "age": 19}}, {"model": "index.author", "pk": 5, "fields": {"name": "lao wei", "age": 18}}, {"model": "index.author", "pk": 6, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 7, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 8, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 9, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 10, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 11, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 12, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 13, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 14, "fields": {"name": "WangDB", "age": 36}}]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python动态加载变量示例分享
Feb 17 Python
使用python 获取进程pid号的方法
Mar 10 Python
用Python和MD5实现网站挂马检测程序
Mar 13 Python
Django中对数据查询结果进行排序的方法
Jul 17 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
python看某个模块的版本方法
Oct 16 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
keras.layer.input()用法说明
Jun 16 Python
keras中的History对象用法
Jun 19 Python
MATLAB数学建模之画图汇总
Jul 16 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 Python
Python搭建HTTP服务过程图解
Dec 14 #Python
Pyqt5自适应布局实例
Dec 13 #Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 #Python
PyQT5 emit 和 connect的用法详解
Dec 13 #Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 #Python
Python assert关键字原理及实例解析
Dec 13 #Python
使用pyqt 实现重复打开多个相同界面
Dec 13 #Python
You might like
PHP工程师VIM配置分享
2015/12/15 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
Electron vue的使用教程图文详解
2019/07/05 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
世界汽车零件:World Car Parts
2019/09/04 全球购物
本科应届生自荐信
2014/06/29 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
django学习之ajax post传参的2种格式实例
2021/05/14 Python
python创建字典及相关管理操作
2022/04/13 Python
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
Tomcat配置访问日志和线程数
2022/05/06 Servers