• 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:只进行反序列化

    总结:

  • 相关阅读:
    iOS-UIScrollView的使用
    iOS-UILabel的使用
    iOS-UITextField的使用
    iOS-UIScreen,UIFont,UIColor,UIView,UIButton
    jQuery和ajax【“Asynchronous Javascript And XML】
    iOS-NSBundle、NSArray、NSDictionay
    iOS-UINavigationController多控制器管理
    iOS-NSNotification本地推送、远程推送
    iOS-MJRefresh框架
    苹果电脑:快捷键使用
  • 原文地址:https://www.cnblogs.com/bonus_scene/p/14982328.html
Copyright © 2020-2023  润新知