序列化器定义
一、序列化器定义
1. 通过继承 Serializer
定义
通过继承 rest_framework.serializers.Serializer
来定义序列化器;针对 部门模型类
和 员工模型类
:
class Department(models.Model):
name = models.CharField(max_length=20, verbose_name='部门名称')
create_date = models.DateField(verbose_name='成立时间')
is_delete = models.BooleanField(default=False, verbose_name='是否删除')
class Employee(models.Model):
choices_gender = (
(0, '男'),
(1, '女'),
)
name = models.CharField(verbose_name='姓名', max_length=20)
age = models.IntegerField(verbose_name='年龄')
gender = models.IntegerField(verbose_name='性别', default=0,
choices=choices_gender)
salary = models.DecimalField(verbose_name='工资', max_digits=8, decimal_places=2)
comment = models.CharField(verbose_name='备注', max_length=300,
null=True, blank=True)
hire_date = models.DateField(verbose_name='入职时间', auto_now_add=True)
department = models.ForeignKey('Department', verbose_name='所属部门')
可以定义 序列化器
如下:
class DepartmentSerializer(serializers.Serializer):
id = serializers.IntegerField(label='ID', read_only=True)
name = serializers.CharField(label='部门名称', max_length=20)
create_date = serializers.DateField(label='成立时间')
is_delete = serializers.BooleanField(label='是否删除', required=False)
class EmployeeSerializer(serializers.Serializer):
choices_gender = (
(0, '男'),
(1, '女'),
)
id = serializers.IntegerField(label='ID', read_only=True)
name = serializers.CharField(label='姓名', max_length=20)
age = serializers.IntegerField(label='年龄')
gender = serializers.ChoiceField(label='性别', required=False,
choices=choices_gender)
salary = serializers.DecimalField(label='工资', max_digits=8, decimal_places=2)
comment = serializers.CharField(label='备注', max_length=300,
allow_black=True, allow_null=True)
hire_date = serializers.DateField(label='入职时间', required=False)
# department = serializers.PrimaryKeyRelatedField(label='所属部门', read_only=True)
2. 通过继承 ModelSerializer
定义
如果是针对模型类定义序列化器,可以通过继承 DRF 提供的 ModelSerializer
来定义,这样更简单:(此方式后面会详细介绍)
class DepartmentSerializer2(serializers.ModelSerializer):
"""部门序列化器"""
class Meta:
model = Department
fields = '__all__'
class EmployeeSerializer2(serializers.ModelSerializer):
"""员工序列化器"""
class Meta:
model = Employee
fields = '__all__'
序列化器类型和选项
1. 常用字段类型
字段 | 字段构造方式 |
---|---|
BooleanField | BooleanField() |
NullBooleanField | NullBooleanField() |
CharField | CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True) |
EmailField | EmailField(max_length=None, min_length=None, allow_blank=False) |
RegexField | RegexField(regex, max_length=None, min_length=None, allow_blank=False) |
SlugField | SlugField(maxlength=50, min_length=None, allow_blank=False) 正则字段,验证正则模式 [a-zA-Z0-9-]+ |
URLField | URLField(max_length=200, min_length=None, allow_blank=False) |
UUIDField | UUIDField(format='hex_verbose') format: 1) 'hex_verbose' 如"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) 'hex' 如 "5ce0e9a55ffa654bcee01238041fb31a" 3) 'int' - 如: "123456789012312313134124512351145145114" 4) 'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a" |
IPAddressField | IPAddressField(protocol='both', unpack_ipv4=False, **options) |
IntegerField | IntegerField(max_value=None, min_value=None) |
FloatField | FloatField(max_value=None, min_value=None) |
DecimalField | DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置 |
DateTimeField | DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None) |
DateField | DateField(format=api_settings.DATE_FORMAT, input_formats=None) |
TimeField | TimeField(format=api_settings.TIME_FORMAT, input_formats=None) |
DurationField | DurationField() |
ChoiceField | ChoiceField(choices) choices与Django的用法相同 |
MultipleChoiceField | MultipleChoiceField(choices) |
FileField | FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL) |
ImageField | ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL) |
ListField | ListField(child=, min_length=None, max_length=None) |
DictField | DictField(child=) |
2. 选项
参数名称 | 作用 | 默认值 |
---|---|---|
max_length | 最大长度 | - |
min_lenght | 最小长度 | - |
allow_blank | 是否允许为空字符串 | False |
trim_whitespace | 是否截掉空白字符 | True |
max_value | 最大值 | - |
min_value | 最小值 | - |
3. 通用选项
参数名称 | 说明 | 默认值 | 何时使用 |
---|---|---|---|
read_only | 表明该字段仅用于序列化输出:(例:主键 id) | False | 序列化 |
write_only | 表明该字段仅用于反序列化输入(例:短信验证码) | False | 反序列化 |
required | 表明该字段在反序列化时必须输入 | True | 反序列化 |
allow_null | 表明该字段是否允许传入None | False | 反序列化 |
default | 反序列化时使用的默认值 | - | 反序列化 |
validators | 该字段使用的验证器 | - | 反序列化 |
error_messages | 包含错误编号与错误信息的字典 | - | - |
label | 用于HTML展示API页面时,显示的字段名称 | - | - |
help_text | 用于HTML展示API页面时,显示的字段帮助提示信息 |