drf-serializer

drf-serializer

序列化和反序列化

  1. 序列化过程:响应的python对象转化为响应报文的json字节流
  2. 反序列化过程:请求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对象,将这些步骤串联整合)

  1. 请求数据反序列化:APIView => def get(request) => request.data
  2. 定义反序列化数据结构 和 序列化数据结构 => class CustomDescSerializer(Serializer)
  3. 数据校验 => is_valid
  4. 数据入库 => create/update
  5. 获取入库的对象 => save
  6. 根据序列化数据结构创建序列化对象需要的数据 => class CustomSerializer(Serializer)
  7. 将第6步的数据转化为序列化对象并响应 => Response(ser.data)

备注:
serializer是所有字段都可以进行序列化和反序列哈
可以通过only_read和only_write来控制序列化和反序列化
only_read:只进行序列化
write_read:只进行反序列化

总结:

posted @ 2021-08-31 14:29  花兒向陽開  阅读(19)  评论(0编辑  收藏  举报