关于Django REST framework中Serializer字段和选项

关于Django REST framework中Serializer字段和选项

1.定义Serializer类
Django REST framework中的Serializer使用类来定义须继承自rest_framework.serializers.Serializer

例如,我们已有了一个数据库模型类BookInfo

class BookInfo(models.Model):
    name = models.CharField(max_length=20, verbose_name='名称') #图书名称
    pub_date = models.DateField(verbose_name='发布日期') #发布日期
    readcount = models.IntegerField(default=0, verbose_name='阅读量') #阅读量
    commentcount = models.IntegerField(default=0, verbose_name='评论量') #评论量
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') #逻辑删除
    image = models.ImageField(upload_to='book/', verbose_name='图片', null=True)
    #元类信息 : 修改表名
    class Meta:
        db_table = 'bookinfo' # 指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.name

我们想为这个模型类提供一个序列化器,可以定义如下:

class BookInfoSerializer(serializers.Serializer):
    """图书数据序列化器"""
    id = serializers.IntegerField(label='ID')
    name = serializers.CharField(label='名称')
    pub_date = serializers.DateField(label='发布日期')
    readcount = serializers.IntegerField(label='阅读量')
    commentcount = serializers.IntegerField(label='评论量')

在这里插入图片描述
注意:serializer不是只能为数据库模型类定义,也可以为非数据库模型类的数据定义。serializer是独立于数据库之外的存在。

2. 字段与选项
常用字段类型:

字段字段构造方式
BooleanFieldBooleanField()
NullBooleanFieldNullBooleanField()
CharFieldCharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
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=)

通用参数:

参数名称说明
read_only表明该字段仅用于序列化输出,默认False
write_only表明该字段仅用于反序列化输入,默认False
required表明该字段在反序列化时必须输入,默认True
default反序列化时使用的默认值
label用于HTML展示API页面时,显示的字段名称

选项参数:

参数名称作用
max_length最大长度
min_lenght最小长度
allow_blank是否允许为空
max_value最大值
min_value最小值

3.创建Serializer对象
定义好Serializer类后,就可以创建Serializer对象了。

Serializer的构造方法为:

Serializer(instance=None, data=empty, **kwarg)

说明:

1)用于序列化时,将模型类对象传入instance参数

serializer = BookInfoSerializer(instance=book)
#或者
serializer = BookInfoSerializer(book)

2)用于反序列化时,将要被反序列化的数据传入data参数

serializer = BookInfoSerializer(data={'name':'xxxx','pub_date':'2000-01-10'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值