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)
风月都好看,人间也浪漫.