Django的序列化
简而言之,我们可以将序列化理解为:
将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化。
如:
queryset = BookInfo.objects.all() book_list = [] # 序列化 for book in queryset: book_list.append({ 'id': book.id, 'btitle': book.btitle, 'bpub_date': book.bpub_date, 'bread': book.bread, 'bcomment': book.bcomment, 'image': book.image.url if book.image else '' }) return JsonResponse(book_list, safe=False)
反之,将其他格式(字典、JSON、XML等)转换为程序中的数据,例如将JSON字符串转换为Django中的模型类对象,这个过程我们称为反序列化。
如:
json_bytes = request.body json_str = json_bytes.decode() # 反序列化 book_dict = json.loads(json_str) book = BookInfo.objects.create( btitle=book_dict.get('btitle'), bpub_date=datetime.strptime(book_dict.get('bpub_date'), '%Y-%m-%d').date() )
在开发REST API时,视图中要频繁的进行序列化与反序列化的编写。
总结
在开发REST API接口时,我们在视图中需要做的最核心的事是:
-
将数据库数据序列化为前端所需要的格式,并返回;
-
将前端发送的数据反序列化为模型类对象,并保存到数据库中。
序列化概念: 数据之间的转换(一种格式转换为另一种格式)
分为两个操作:
序列化: 模型类对象 --> python字典 --> json字符串 用于输出到前端
后端数据----前端数据
模型类/字典 ----- json
反序列化: 前端传递的json数据 ---> python字典 --> 经过校验 --> 转换为模型类进而影响数据库 用于输入到后端
前端数据 --- 后端数据
json ---- 模型类/字典
额外补充:
DRF提供的序列化器:
序列化操作真正会做的事情是: 将模型类转换为字典
反序列化操作真正会做的事情是:验证前端传递的转换后的字典数据,将字典数据转换为模型类

浙公网安备 33010602011771号