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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
以一段代码为实例快速入门Python2.7
Mar 31 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python Numpy库常见用法入门教程
Jan 16 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
QML实现钟表效果
Jun 02 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 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读取超大文件的实例代码
2012/04/01 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
学习ExtJS form布局
2009/10/08 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
javascript 中的 delete及delete运算符
2015/11/15 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
Python中的魔法方法深入理解
2014/07/09 Python
Python 中 Meta Classes详解
2016/02/13 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
tensorboard显示空白的解决
2020/02/15 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
关于运动会的稿件
2014/02/02 职场文书
舞蹈专业求职信
2014/06/13 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书