Django restframework序列化

django-rest-framework-tutorial-cn(DRF中文教程,如下摘要須要注意的部分,便於理解回顧)html

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

建立一個 Model

class Snippet(models.Model):
    ...

參看教程(略)git

建立一個序列化類(Serializer class)

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

Model ——> Serializer

生成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'}
Serializer ——>JSON

將數據轉換成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')

反序列化

stream——>Python

將輸入流(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對象(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')])]
相關文章
相關標籤/搜索