zoukankan      html  css  js  c++  java
  • 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:只进行反序列化

    总结:

  • 相关阅读:
    webpack devServer配置项的坑
    app混合开发 fastlick.js 在ios上 input标签点击 不灵敏 处理
    vue 学习八 自定义指令
    Verilog数值大小比较
    Verilog实现Matlab的fliplr函数
    基本不等式
    如何读取ila数据
    Xilinx FPGA时钟IP核注意事项
    FPGA Turbo译码器注意事项
    EbN0转SNR
  • 原文地址:https://www.cnblogs.com/bonus_scene/p/14982328.html
Copyright © 2011-2022 走看看