• drf的序列化和反序列化


    序列化器--Serializer

    选项参数:

    • max_length 最大长度

    • min_length 最小长度

    • allow_blank 是否允许为空

    • trim_whitespace 是否截断空白字符

    • max_value 最小值

    • min_value 最大值

      通项参数

    • read_only 该字段仅用于序列化输出,默认false

    • write_only 该字段仅用于反序列化输入,默认false

    • required 该字段在反序列化时必须输入,默认true

    • default 反序列化时使用的默认值

    • allow_null 该字段是否允许传入None,默认false

    • validators 该字段使用的验证器

    • error_messages 包含错误编号与错误信息的字典

    • label 用于HTML展示页面时,显示的字段名称

    • help_text 用于HTML展示页面时,显示的字段帮助提示信息

      注意事项:

        1.使用序列化器的时候一定要注意,序列化器声明了以后,不会自动执行,需要我们在视图中进行调用才可以。
      

      ​ 2.序列化器无法直接接收数据,需要我们在视图中创建序列化器对象时把使用的数据传递过来。

      ​ 3.序列化器的字段声明类似于我们前面使用过的表单系统。

      ​ 4.开发restful api时,序列化器会帮我们把模型数据转换成字典.

      1. drf提供的视图会帮我们把字典转换成json.或者把客户端发送过来的数据 转换字典
    序列化器的使用

    序列化器的使用分两个阶段:
    1.在客户端请求时,使用序列化器可以完成对数据的反序列化。
    2.在服务器响应时,使用序列化器可以完成对数据的序列化。

    ModelSerializer组件

        ModelSerializer与常规的Serializer相同,但提供了
        * 基于模型类自动生成一系列字段
        * 基于模型类自动为Serializer生成validators,比如unique_together
        * 包含默认的create()和update()的实现
    

    定义

    class BookInfoSerializer(serializes.ModelSerializer):
          class Meta:
              el=BookInfo
               fields='__all__'             
                      
    model指明参照哪个模型类
    fields指明为模型类的哪些字段生成
    

    我们可以在python manage.py shell中查看自动生成的BookInfoSerializer的具体实现

    指定字段

    • 使用fields来明确字段,__all__表示包含所有字段

    • 使用exclude可以明确排除掉哪些字段

    • 通过read_only_fields指明只读字段,仅用于序列化输出的字段

    • 使用extra_kwargs参数为ModelSerialize添加或修改原有的选项参数

      """ 单表序列化总结
    1)序列化与反序列功能可以整合成一个类,该类继承ModelSerializer
    2)继承ModelSerializer类的资源序列化类,内部包含三部分
        Meta子类、局部钩子、全局钩子
        注:create和update方法ModelSerializer已经重写了,使用不需要重写
    3)在Meta子类中:
        用model来绑定关联的Model类
        用fields来设置所有的序列化反序列化字段
        用extra_kwargs来设置系统的校验规则
    4)重要的字段校验规则:
        read_only校验规则,代表该字段只参与序列化
        write_only校验规则,代表该字段只参与反序列化
        required校验规则,代表该字段在反序列化是是否是必填(True)还是选填(False),不能和read_only一起使用(规则冲突)
        规则细节:
            如果一个字段有默认值或是可以为空,没设置required规则,默认为False,反之默认值为True
            如果一个Model字段即没有设置read_only也没设置write_only,该字段默认参与序列化及反序列化
    5)自定义序列化字段:在Model类中,定义方法属性(可以返回特殊值,还可以完成连表操作),在序列化类的fields属性中可以选择性插拔
    6)自定义反序列化字段:在Serializer类中,自定义校验字段,校验规则也只能在声明字段时设置,自定义的反序列化字段(如re_pwd),
    必须设置write_only为True
    """
    
  • 相关阅读:
    「SHOI2015」脑洞治疗仪
    LOJ 数列分块入门 8
    CF932F Escape Through Leaf
    NOIP2021游记总结
    [HEOI2016/TJOI2016]序列
    【模板】动态树(Link Cut Tree)
    LG P2839 [国家集训队]middle
    JZOJ 7377.欢乐豆
    JZOJ 7392. 【2021.11.17NOIP提高组联考】数 (ds)
    LOJ 数列分块入门 6
  • 原文地址:https://www.cnblogs.com/lzss/p/11922448.html
Copyright © 2020-2023  润新知