一、环境安装与配置
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.初始化生成序列化对象
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={
"字段名": {"选项": 参数}
}