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={
        "字段名": {"选项": 参数}
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值