drf-serializer
序列化和反序列化
- 序列化过程:响应的python对象转化为响应报文的json字节流
- 反序列化过程:请求body的json字节流转化为python对象
序列化和反序列化处理过程
# POST
def user(request):
# 使用json工具进行请求数据反序列化
data = json.loads(request.POST)
# 获取需要的请求数据
name = data.get('name', '')
password = data.get('password', '')
# 请求数据校验
name_len = len(name)
pwd_len = len(password)
if name_len<8 or name_len>16:
# 验证失败,手动序列化
return HttpResponse("{"code": 1000, "msg": "名称需要8-16位"}", content_type='application')
# 请求数据处理
password_md5 = utils.to_md5(password)
# 创建user模型对象
user = User.objects.create(name=name, password=password_md5)
# 保存user模型对象(持久化)
user.save()
# 响应数据构造
data = {}
data.id = user.id
data.name = user.name
data.create_time = user.create_time
result = {'code': 0, 'msg': '操作成功', 'data': data}
# 响应
return HttpResponse(json.dumps(result), content_type='application')
DRF的序列化和反序列化过程封装优化(核心是Serialzier对象,将这些步骤串联整合)
- 请求数据反序列化:APIView => def get(request) => request.data
- 定义反序列化数据结构 和 序列化数据结构 => class CustomDescSerializer(Serializer)
- 数据校验 => is_valid
- 数据入库 => create/update
- 获取入库的对象 => save
- 根据序列化数据结构创建序列化对象需要的数据 => class CustomSerializer(Serializer)
- 将第6步的数据转化为序列化对象并响应 => Response(ser.data)
备注:
serializer是所有字段都可以进行序列化和反序列哈
可以通过only_read和only_write来控制序列化和反序列化
only_read:只进行序列化
write_read:只进行反序列化
总结: