python_web学习笔记五:django基础篇之DRF-Serializer序列化器

一、环境安装与配置

pip install djangorestframework
INSTALLED_APPS = [
    ...
    'rest_framework',
]

二、序列化使用

1.定义序列化器

a.指定序列化器字段

  • 常用字段类型

字段 说明
CharField 字符串类型
DateField 日期类型
DatetimeField 日期-时间类型
TimeField 时间类型
IntegerField 整型
BooleanField 布尔型
  • 其他字段

字段 说明
NullBooleanField 可以包含空值的布尔类型
EmailField 字符串,会检查email地址
URLField 储存URL
IPAddressField 十进制IP地址
FloatField 浮点数
DecimalField 固定精度的十进制数
ChoiceField 选择,与模型定义用法相同
FileField 文件
ImageField 图片
  • 示例

class BookSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(label="ID", read_only=True)
    title = serializers.CharField(label="名称", max_length=20, min_length=1)
    pub_date = serializers.DateField(label="发布日期")
    read = serializers.IntegerField(label="阅读量", required=False)
    comment = serializers.IntegerField(label="评论量", required=False)
    is_delete = serializers.BooleanField(required=False, write_only=True)

b.嵌套序列化返回

  • 父表嵌套子表返回

    默认没有使用related_name指定字段则使用子表小写_set

    • PrimaryKeyRelatedField 返回从表id

    • StringRelatedField 被序列化为关联对象的字符串表示方式

    • 使用子表序列化器指定字段返回

  • 子表嵌套父表返回

    使用外键字段作为父表字段

    • PrimaryKeyRelatedField 返回从表id

    • StringRelatedField 被序列化为关联对象的字符串表示方式

    • 使用父表序列化器指定字段返回

2.在视图中使用序列化器完成序列化返回

a.初始化生成序列化对象

  • 将要序列化返回的数据对象传入序列器中

    ser = XXXSerializer(对象) many=True返回多个数据

b.使用data方法获取序列化后的数据

​ ser.data

三、反序列化使用

1.验证

a.字段选型验证

  • 常用字段选项

字段 说明
max_length 判断字符串类型数据的最大长度
min_length 判断字符类型数据的最小长度
max_value 最大值判断
min_value 最小值判断
default 未传数据使用默认值
required 默认为True,要求必须传值
read_only 只参与序列化返回过程
write_only 只参与反序列化返回过程
  • 自定义方法验证

    • 单一字段验证

      def validate_字段名(self, attrs):
          验证逻辑
          return attrs
      # 示例
      def validate_mobile(self, attrs):
          if not re.match('^1[3-9]\d{9}$', attrs):
              raise serializers.ValidationError("手机格式错误")
          return attrs
      
    • 多字段验证

      def validate(self, attrs):
          验证逻辑
          return attrs
      
  • 在视图中使用序列化器完成反序列化的验证

    # 初始化生成序列化器对象
    ser = XXXSerializer(data=验证数据)
    # 使用验证方法
    ser.is_valid()
    # 获取验证状态
    ser.errors  # 验证成功返回空字典
    # 获取验证后的数据
    ser.validated_data  # 验证失败获得空字典
    

2.保存和更新数据

# 保存
def create()
# 更新
def update()
# 视图中
ser.save()

四、模型类序列化器

# 可根据指定的模型类自动生成序列化器字段
# 1.继承
serializers.ModelSerializer
# 2.Meta
class Meta:
    model = 模型类
    fields = (字段,)  # 元组
    extra_kwargs={
        "字段名": {"选项": 参数}
    }

你可能感兴趣的:(python学习笔记_web篇,python笔记)