让我来给你介绍一下 Django Rest Framework 序列化器(Serializers)。
什么是序列化器?
序列化是指将数据结构或对象转换为一系列可被存储、传输或重构为原始对象的字节流的过程。而在 Django Rest Framework 中,我们使用序列化器来实现 Python 对象和 JSON 数据之间的相互转换。
在 Django Rest Framework 中,序列化器充当两个不同任务:
- 将复杂数据类型(如 Model 对象)转化成 JSON 数据以用于 API 的相应。
- 将 JSON 数据转化成 Model 的实例以用于 API 的请求传入。
通过使用序列化器,我们可以轻松地构建和管理 API 的输出与输入。
Django Rest Framework 中的序列化器类型
在 Django Rest Framework 中,有多种序列化器可供选择。其中最常用的有以下三种:
-
serializers.Serializer
:这个类是用于序列化的基础类,它提供了一些默认设置,例如自动转化输入或输出序列为实例,或将属性转化成字典。 -
serializers.ModelSerializer
:这个类是使用最多的序列化器类型,主要是用于将 Model 对象(或 queryset)转换成序列化的对象,并基于 Model 对象的模型创建反序列化的对象。 -
serializers.HyperlinkedModelSerializer
:这个类继承了 ModelSerializer,主要是用于将关联到 URL 的资源嵌入到序列化器中,输出 API 数据。
一个例子
下面是一个简单的 Model(稍微有一点,尚可作为示例的复杂度):
class Author(models.Model):
name = models.CharField(max_length=64)
email = models.EmailField()
biography = models.TextField(blank=True, null=True)
我们现在定义一个序列化器来序列化 Author 对象:
from rest_framework import serializers
from .models import Author
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
使用 __all__
参数可以序列化 Author Model 所有的字段值。我们现在来序列化一个 Author 对象,输出它的相关信息:
author = Author(name="Eduardo", email="edu@example2.com", biography="A DJ from Brazil")
serializer = AuthorSerializer(author)
print(serializer.data)
此时将输出以下 JSON 格式的数据:
{
"id": null,
"name": "Eduardo",
"email": "edu@example2.com",
"biography": "A DJ from Brazil"
}
反序列化
将 JSON 数据反序列化成 Model 对象是 Django Rest Framework 的重要功能之一。在序列化器中,我们可以定义 create()
或 update()
方法来做反序列化的工作。
让我们还是用 Author Model 来举一个反序列化的例子。接下来是我们的 Serializer:
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = "__all__"
def create(self, validated_data):
return Author.objects.create(**validated_data)
上述 Serializer 中的 create()
方法基于输入数据创建新的 Author 实例。要验证来自 API 请求的输入数据,需要在 Serializer 中使用验证器,以下是一个示例:
class AuthorSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = Author
fields = "__all__"
def create(self, validated_data):
return Author.objects.create(**validated_data)
在上述 Serializer 中,我们使用了 EmailField 进行数据验证。如果验证失败,将会立即引发一个 ValidationError。
上述的 Serializer 可以在视图中像下面这样使用:
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import AuthorSerializer
class AuthorAPIView(APIView):
def post(self, request, format=None):
serializer = AuthorSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=HTTP_201_CREATED)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
以上就是序列化器的使用和示例说明,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django rest framework serializers序列化实例 - Python技术站