Loading

6.序列化的使用

一、导入
 
# 导入rest_framework渲染器(renderers)里面的json渲染器
from rest_framework.renderers import JSONRenderer

# 导入rest_framework渲染器(parsers)里面的json解析器
from rest_framework.parsers import JSONParser

# 导入snippets应用的模型类
from snippets.models import Snippet

#导入snippets应用Snippet模型的序列化器
from snippets.serializers import SnippetSerizlizer
二、序列化使用(Django shell)
1.创建代码片段
2.创建序列化实例 serializer = SnippetSerizlizer(模型实例)
3.将数据转换成json格式 JSONRenderer().render(序列器对象.data)
# Django shell
# 正向序列化
#创建代码片段
>>> snippet = Snippet(code='foo = "bar"\n')
>>> snippet.save()
>>> snippet = Snippet(code='print("hello world")\n')
>>> snippet.save()

# 把一个模型实例,做为参数传递给序列化器并序列化出一个序列化的实例
>>> serializer = SnippetSerizlizer(snippet)

#序列化器给我们提供了.data属性,包含了我们序列化出来的数据
>>> serializer.data
输出:{'id': 2, 'title': '', 'code': 'print("hello world")\n', 'linenos': False, 'language': 'python', 'style': 'friendly'}

#将模型实例对象转换成了python原生数据类型
>>> type(serializer.data)
输出:<class 'rest_framework.utils.serializer_helpers.ReturnDict'>

>>> issubclass(type(serializer.data),dict)
输出:True


#完成最终的序列化过程,我们还需要将数据转换成 json 格式
>>> connect = JSONRenderer().render(serializer.data)
>>> connect
b'{"id":2,"title":"","code":"print(\\"hello world\\")\\n","linenos":false,"language":"python","style":"friendly"}'
>>> type(connect)
<class 'bytes'>

'''
以上是序列化过程,也就是使用ORM从数据库中读取对象,然后序列化为DRF的某种格式,再
转换为json格式(为什么上面是bytes类型,这是和Python语言相关的,py3以后数据流都是bytes),最后将json数据通过
HTTP发送给客户端
'''
#反序列化
# 解析前端传过来的数据
>>> data = JSONParser().parse(param)
>>> type(data)
输出:<class 'dict'>
>>> serializer = SnippetSerializer(data=data)

#验证数据是否合法
>>> serializer.is_valid() 

>>>serializer.validated_data
#保存数据,调用save实际调用了序列化类的create()
>>>serializer.save()
many=True序列化/反序列化操作数据的时候,如果是多条数据,需要加many=True,代表序列化多条数据
SnippetSerializer(Snippet.objects.all(),many=True)

 

posted @ 2022-04-29 19:16  木子七  阅读(87)  评论(0编辑  收藏  举报