django-rest-framework-tutorial-cn(DRF中文教程,如下摘要须要注意的部分,便于理解回顾)html
https://whatwewant.gitbooks.io/django-rest-framework-tutorial-cn/content/1.Serialization.htmlpython
class Snippet(models.Model): ...
参看教程(略)git
DRF的序列化的类相似于的Django的表单类,Django的表单类是用于沟通django的Model和网页的form之间的桥梁; 而序列化类是哟哦那个与沟通Django的Model类和JSON数据格式之间的桥梁。 对model实力序列化/反序列化成表述,这里用json。django
SnippetSerializer(serializers.Serializer ): ... # 定义如何经过反序列化数据生成正确的对象实例 def restore_object(): pass
建立snippets实例:json
snippet = Snippet(code='foo = "bar"\n') snippet.save() snippet = Snippet(code = 'print "hello, world"\n') snippet.save()
如今有了snippet实例,接下来将其中一个实例序列化。api
生成Python原生数据rest
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'}
将数据转换成json格式,完成序列化code
content = JSONRender().render(serialilzer.data) content # 已经转换成JSON格式 # '{"pk": 2, "title": "", "code": "print \\"hello, world\\"\\n", "linenos": false, "language": "python", "style": "friendly"}'
这个就能够直接诶送入api进行传输了。 相似于json.dumpsorm
json.dumps(serializer.data).encode('utf-8')
将输入流(content),转换成Python原生数据类型htm
stream = BytesIO(content) data = JSONPaser().parse(stream)
将字节流变成Python的dict (json.loads)
json.loads(content.decode('utf-8'))=serializer.data (True)
将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>
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')])]