文档章节

Django restframework序列化

人间四月
 人间四月
发布于 2016/09/22 23:51
字数 592
阅读 67
收藏 0

django-rest-framework-tutorial-cn(DRF中文教程,以下摘要需要注意的部分,便于理解回顾)

https://whatwewant.gitbooks.io/django-rest-framework-tutorial-cn/content/1.Serialization.html

创建一个 Model

class Snippet(models.Model):
    ...

参看教程(略)

创建一个序列化类(Serializer class)

DRF的序列化的类类似于的Django的表单类,Django的表单类是用于沟通django的Model和网页的form之间的桥梁; 而序列化类是哟哦那个与沟通Django的Model类和JSON数据格式之间的桥梁。 对model实力序列化/反序列化成表述,这里用json。

SnippetSerializer(serializers.Serializer
):
    ...
    # 定义如何通过反序列化数据生成正确的对象实例
    def restore_object():
        pass

使用序列化工作

创建snippets实例:

snippet = Snippet(code='foo = "bar"\n')
snippet.save()

snippet = Snippet(code = 'print "hello, world"\n')
snippet.save()

现在有了snippet实例,接下来将其中一个实例序列化。

Model ——> Serializer

生成Python原生数据

serializer = SnippetSerializer(snippet)
serializer.data
# 现在我们已经将模型实例(model instance)转化成Python原生数据类型。
# data挂在的是Python的dict字典的值
# {'pk': 2, 'title': u'', 'code': u'print "hello, world"\n', 'linenos': False, 'language': u'python', 'style': u'friendly'}

Serializer ——>JSON

将数据转换成json格式,完成序列化

content = JSONRender().render(serialilzer.data)
content
# 已经转换成JSON格式
# '{"pk": 2, "title": "", "code": "print \\"hello, world\\"\\n", "linenos": false, "language": "python", "style": "friendly"}'

这个就可以直接诶送入api进行传输了。 类似于json.dumps

json.dumps(serializer.data).encode('utf-8')

反序列化

stream——>Python

将输入流(content),转换成Python原生数据类型

stream = BytesIO(content)
data = JSONPaser().parse(stream)

将字节流变成Python的dict (json.loads)

json.loads(content.decode('utf-8'))=serializer.data
(True)
Python——>serializer对象(models instance?)

将Python原生数据类型,转换成对象实例

serializer = SnippetSerializer(data=data)
serializer.is_valid()
# True
serializer.validated_data
# OrderedDict([('title', ''), ('code', 'print "hello, world"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')])
serializer.save()
# <Snippet: Snippet object>
可以序列化模型实例(model instance),也可以序列化查询集(querysets),需要添加参数 many=True。
serializer = SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data
# [OrderedDict([('pk', 1), ('title', u''), ('code', u'foo = "bar"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('pk', 2), ('title', u''), ('code', u'print "hello, world"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('pk', 3), ('title', u''), ('code', u'print "hello, world"'), ('linenos', False), ('language', 'python'), ('style', 'friendly')])]

© 著作权归作者所有

上一篇: 请求与响应
下一篇: 序列化/反序列化
人间四月
粉丝 2
博文 74
码字总数 30455
作品 0
朝阳
程序员
私信 提问
基于Django实现 RESTful API 之RestFramework框架

一、首先什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它将分布在...

SlashBoyMr_wang
2018/09/17
0
0
Django REST framework的各种技巧——1.基础讲解

写在最上面的话 django是一个神奇的框架,而restframework又是遵循了这个框架的另一个神奇的框架,然而由于restframework的文档稀烂无比,很多时候你必须看源码才能写出科学的代码,这挡住了...

D咄咄
2017/11/29
0
0
Django rest framework 认证组件源码分析

基础知识 想要弄清楚rest framework的执行过程首先需要明白Django中CBV和FBV执行流程,http请求最最本质的就是一个socket,一个请求过来第一步就是做路由匹配,在FBV中因为视图本身就是一个函...

FanMLei
2018/11/27
0
0
Django REST framework的各种技巧——1.基础讲解

写在最上面的话 django是一个神奇的框架,而restframework又是遵循了这个框架的另一个神奇的框架,然而由于restframework的文档稀烂无比,很多时候你必须看源码才能写出科学的代码,这挡住了...

duoduo3_69
2016/02/01
528
0
django rest framework 快速启动教程

Django REST framework是一个快速、灵活的django插件,非常便于构建web API 官网链接 本章要点 如何准备项目(创建测试环境、安装django/restframework等) 编写seriallizer/view/url 配置r...

yarving
2017/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【运维】记一次上线前的紧急定位与修复-献上九条小经验

1 简介 本文介绍了作者所在团队在某次上线前测试发现问题、定位问题并修复上线的过程,最后给出几点经验总结,希望对大家有用。 2 过程 (1)今天需要上线,但昨晚才合并了所有分支,时间很紧...

南瓜慢说
36分钟前
4
0
Elasticsearch系列---初识Elasticsearch

Elasticsearch是什么? Elasticsearch简称ES,是一个基于Lucene构建的开源、分布式、Restful接口的全文搜索引擎,还是一个分布式文档数据库。天生就是分布式、高可用、可扩展的,可以在很短的...

清茶豆奶
48分钟前
3
0
服务安全之:JWT

JWT是JSON Web Tokens的缩写。既然叫JSON Web Tokens,所以JWT Tokens中真正包含的是多个JSON对象。为什么是多个JSON对象呢?因为SWT Token实际上是由三部分组成,其中有两部分是JSON格式。这...

popgis
今天
4
0
C++ Primer 笔记整理(一)基本语法介绍

C++被称为“完美的程序设计语言”,在chromium内核中应用非常广泛,之前没有系统学习过C++相关的知识,通过看书来学习相关的知识,现在将《C++ Primer》基本知识提取出来,供大家学习。 1.输...

天王盖地虎626
今天
2
0
你知道多少this,new,bind,call,apply?那我告诉你

那么什么是this,new,bind,call,apply呢?这些你都用过吗?掌握这些内容都是基础中的基础了。如果你不了解,那还不赶快去复习复习,上网查阅资料啥的! 通过call,apply,bind可以改变thi...

达达前端小酒馆
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部