django rest framework serializers序列化实例

序列化的概念

序列化是指将对象转换为字节序列的过程,而反序列化则是将字节序列解析成相应的对象。对于Web开发来说,序列化最常见的应用场景是将Python对象转化成JSON格式的数据用于前端渲染。而在Django框架中,有一套封装好的序列化工具——Django Rest Framework(DRF),它让我们能够以快捷的方式实现序列化和反序列化的过程,且支持多种输出格式和对数据的过滤、校验和限制等功能。

DRF序列化组件

DRF提供了两个重要的组件: Serializer 和 ModelSerializer。

Serializer

该组件是DRF的核心部分, 它将Python原生数据类型到能够被渲染到JSON格式所需的数据类型之间进行转换。能实现的序列化过程将Python的数据类型(一般是一个模型对象)转换成Python原生数据类型,最终将其转换成JSON格式,以便于输出。

from rest_framework import serializers

class ExampleSerializer(serializers.Serializer):

field1 = serializers.CharField(max_length=10)

field2 = serializers.DecimalField(max_digits=3, decimal_places=1)

field3 = serializers.IntegerField()

例子中,我们定义了一个ExampleSerializer 的类,继承了 serializers.Serializer。接着定义了三个field,分别对应 Python 数据类型中的字符串、小数和整数类型。然后我们可以把其转换成JSON格式。

serializer_instance = ExampleSerializer({

'field1': 'A string',

'field2': 199.9,

'field3': 543,

})

print(serializer_instance.data)

运行结果为:

{

'field1': 'A string',

'field2': '199.9',

'field3': 543

}

ModelSerializer

该组件继承自Serializer,主要作用是快速实现对数据库模型的序列化或反序列化。我们首先需要创建模型类,然后使用DRF的 ModelSerializer 继承该模型类,如下所示:

from rest_framework import serializers

from myapp.models import ExampleModel

class ExampleModelSerializer(serializers.ModelSerializer):

class Meta:

model = ExampleModel

fields = '__all__'

Meta中定义了模型类 (model) 和序列化的字段 (fields)

DRF序列化过程

一个 DRF 序列化的过程主要包括以下四个步骤:

定义serializer类

我们可以在程序的某个地方定义一个serializer类。先用Python定义这个类,然后用DRF序列化器完成将该类转换为JSON格式。

使用serializer实例化

DRF序列化过程需要将用户输入的 JSON 格式字符串转换成Python字典,然后使用我们定义的serializer完成转换,将Python对象(包括模型对象)输出至 JSON 。在第二步的过程中,输入的 JSON 字符串被序列化器解析成Python对象:

serializer = ExampleSerializer(data=data_dict)

if serializer.is_valid():

print(serializer.validated_data)

校验数据并返回对象

序列化器也可以用来校验我们输入的数据,这个输入值可以是从一个POST请求中收到的数据,也可以通过一个 AJAX 请求提交而来。在 DRF 框架中使用校验器进行个性化的校验处理支持的数据格式包括JSON、表单、文本等。在这一步中,我们定义的serializer将完成数据的合法性校验以及将校验过的 validated_data 的对象返回回去。

转换成JSON响应

将数据对象转化为序列化的JSON格式,在HTTP Response中返回。在DRF中,可以使用自带的Response类来完成响应结果的封装操作。

小结

DRF序列化器是一个非常强大的工具,可以让我们的开发工作变得快捷和准确。它可以用来序列化和反序列化Python对象,对数据进行校验和过滤,并且支持多种输出格式。通过这篇文章,大家应该对DRF序列化器的概念、组件和序列化过程有了更深入的了解。

后端开发标签