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提供的序列化器:
序列化操作真正会做的事情是: 将模型类转换为字典
反序列化操作真正会做的事情是:验证前端传递的转换后的字典数据,将字典数据转换为模型类

posted @ 2019-11-12 18:58  阿磊小哥哥呀  阅读(123)  评论(0)    收藏  举报