Django中序列化与反序列化
1:序列化:
将数据结构或对象状态转换为可以存储或传输的格式(如JSON、XML)的过程。
在Web开发中,通常是将模型实例(或查询集)转换为JSON格式,
以便通过HTTP响应发送给客户端。
序列化(Serialization):
将 复杂数据类型(如 Django 模型实例/查询集) → 转换为 可传输/存储的格式(如 JSON、XML)。
核心目的:将数据转换为客户端可读的格式(如 API 响应)。
实现方式:
Django REST Framework (DRF)(推荐):
from rest_framework import serializersclass BookSerializer(serializers.ModelSerializer):class Meta:model = Bookfields = ['id', 'title', 'author'] # 指定字段# 序列化模型实例
book = Book.objects.get(id=1)
serializer = BookSerializer(book)
json_data = serializer.data # 输出: {'id':1, 'title':'Django Guide', 'author':'Alice'}
2. 反序列化(Deserialization):
将 客户端传入的数据(如 JSON) → 转换为 Django 模型实例/复杂数据类型。
核心目的:验证并转换数据供服务端使用(如创建/更新数据库记录)。
DRF 反序列化(带数据验证):
# 客户端传入的 JSON 数据
incoming_data = {'title': 'New Book', 'author': 'Bob'}# 1. 验证数据 + 转换为模型实例
serializer = BookSerializer(data=incoming_data)
if serializer.is_valid(): # 验证数据是否符合规则book_instance = serializer.save() # 创建/更新模型实例
else:errors = serializer.errors # 获取错误信息# 2. 更新现有实例
book = Book.objects.get(id=1)
serializer = BookSerializer(book, data=incoming_data, partial=True) # partial=True 允许部分更新