定义序列化器

序列化器定义

一、序列化器定义

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. 常用字段类型

字段字段构造方式
BooleanFieldBooleanField()
NullBooleanFieldNullBooleanField()
CharFieldCharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
EmailFieldEmailField(max_length=None, min_length=None, allow_blank=False)
RegexFieldRegexField(regex, max_length=None, min_length=None, allow_blank=False)
SlugFieldSlugField(maxlength=50, min_length=None, allow_blank=False) 
正则字段,验证正则模式 [a-zA-Z0-9
-]+
URLFieldURLField(max_length=200, min_length=None, allow_blank=False)
UUIDFieldUUIDField(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"
IPAddressFieldIPAddressField(protocol='both', unpack_ipv4=False, **options)
IntegerFieldIntegerField(max_value=None, min_value=None)
FloatFieldFloatField(max_value=None, min_value=None)
DecimalFieldDecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None)
max_digits: 最多位数
decimal_palces: 小数点位置
DateTimeFieldDateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
DateFieldDateField(format=api_settings.DATE_FORMAT, input_formats=None)
TimeFieldTimeField(format=api_settings.TIME_FORMAT, input_formats=None)
DurationFieldDurationField()
ChoiceFieldChoiceField(choices)
choices与Django的用法相同
MultipleChoiceFieldMultipleChoiceField(choices)
FileFieldFileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ImageFieldImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ListFieldListField(child=, min_length=None, max_length=None)
DictFieldDictField(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表明该字段是否允许传入NoneFalse反序列化
default反序列化时使用的默认值-反序列化
validators该字段使用的验证器-反序列化
error_messages包含错误编号与错误信息的字典--
label用于HTML展示API页面时,显示的字段名称--
help_text用于HTML展示API页面时,显示的字段帮助提示信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值