什么是序列化器
序列化器允许把像查询集和模型实例这样的复杂数据转换为可以轻松渲染成JSON,XML或其他内容类型的原生Python类型。序列化器还提供反序列化,在验证传入的数据之后允许解析数据转换回复杂类型。
REST framework中的serializers与Django的Form和ModelForm类非常像。我们提供了一个Serializer类,它为你提供了强大的通用方法来控制响应的输出,以及一个ModelSerializer类,它为创建用于处理模型实例和查询集的序列化程序提供了有用的快捷实现方式。
声明序列化器(serializer)
我们声明一个序列化器(serializer),我们可以使用它来序列化和反序列化
声明一个序列化器看起来非常像声明一个form
Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer。
例如,我们已有了一个数据库模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name=‘名称’)
bpub_date = models.DateField(verbose_name=‘发布日期’, null=True)
bread = models.IntegerField(default=0, verbose_name=‘阅读量’)
bcomment = models.IntegerField(default=0, verbose_name=‘评论量’)
image = models.ImageField(upload_to=‘booktest’, verbose_name=‘图片’, null=True)
我们想为这个模型类提供一个序列化器,可以定义如下:
class BookInfoSerializer(serializers.Serializer):
“”“图书数据序列化器”""
id = serializers.IntegerField(label=‘ID’, read_only=True)
btitle = serializers.CharField(label=‘名称’, max_length=20)
bpub_date = serializers.DateField(label=‘发布日期’, required=False)
bread = serializers.IntegerField(label=‘阅读量’, required=False)
bcomment_count = serializers.IntegerField(label=‘评论量’, required=False)
image = serializers.ImageField(label=‘图片’, required=False)
注意:serializer不是只能为数据库模型类定义,也可以为非数据库模型类的数据定义。serializer是独立于数据库之外的存在。
参数:
max_length
最大长度
min_lenght
最小长度
allow_blank
是否允许为空