Serializer序列化

2022/6/15 23:24:28

本文主要是介绍Serializer序列化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 序列化类Serializer的使用
  • 序列化类常用字段和字段参数
    • 常见字段
    • 常见字段参数

序列化类Serializer的使用

serializers序列化组件:

  • 序列化过程:可以把我们用ORM产生的QuerySet对象转换成json格式数据;
  • 反序列化过程:可以实现数据校验功能,并把客户端发送过来的数据(前端json格式字符串),经过request.data以后变成字典,再把字典转成模型,存到数据库;

简单使用

模型层:

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.IntegerField()

创建序列化类:不想序列化的字段不写就行,建议新建py文件专门存放序列化类。

from rest_framework import serializers

class BookSerializer(serializers.Serializer):
    name = serializers.CharField()  # 与模型层字段类型对应
    price = serializers.IntegerField()  # 与模型层字段类型对应

视图层:

class BookAPIView(APIView):
    def get(self, request):
        # 取出所有图书的queryset对象
        books = models.Book.objects.all()
        # instance:要序列化的对象
        # many:是否有多条数据,只有一条数据就不用传many参数
        ser = serializer.BookSerializer(instance=books, many=True)
        # 序列化后的数据
        print(ser.data)
        return Response(ser.data)

序列化类常用字段和字段参数

常见字段

跟模型层的字段一样,但比模型层的字段多几个:

BooleanField()
NullBooleanField()
CharField()
EmailField()
RegexField()
SlugField()
URLField()
UUIDField()
IPAddressField()
IntegerField()
FloatField()
DecimalField()
DateTimeField()
DateField()
TimeField()
ChoiceField()
FileField()
ImageField()

serializer独有字段:

ListField()
DictField()

常见字段参数

serializer中的字段参数是用来反序列化时校验用的。

CharField()

参数 作用
max_length 最大长度
min_lenght 最小长度
allow_blank 是否允许为空
trim_whitespace 是否截断空白字符

IntegerField()

参数 作用
max_value 最小值
min_value 最大值

通用参数

参数 作用
read_only 表明该字段仅用于序列化输出,默认False
write_only 表明该字段仅用于反序列化输入,默认False
required 表明该字段在反序列化时必须输入,默认True
default 反序列化时使用的默认值
allow_null 表明该字段是否允许传入None,默认False
error_messages 包含错误编号与错误信息的字典


这篇关于Serializer序列化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程