创建和使用序列化器 – Django REST框架

创建和使用序列化器 – Django REST框架

Django REST框架中,序列化的概念是将DB数据转换为可被javascript使用的数据类型。序列化器允许复杂的数据,如querysets和模型实例,被转换为本地Python数据类型,然后可以很容易地呈现为JSON、XML或其他内容类型。序列化器还提供了反序列化,允许解析后的数据在首先验证了传入的数据后被转换回复杂类型。REST框架中的序列化器与Django的Form和ModelForm类的工作非常相似。

要检查如何设置Django RESt框架并创建一个API,请访问 – 如何使用Django Rest框架创建一个基本API?

创建一个基本的串行器

要创建一个基本的序列化器,需要从rest_framework导入序列化器类,并为序列化器定义字段,就像在Django中创建一个表单或模型一样。

示例

# import serializer from rest_framework
from rest_framework import serializers
 
# create a serializer
class CommentSerializer(serializers.Serializer):
    # initialize fields
    email = serializers.EmailField()
    content = serializers.CharField(max_length = 200)
    created = serializers.DateTimeField()

这样,人们可以根据所需字段为任何特定的实体或对象声明序列化器。序列化器可用于序列化和反序列化数据。

使用序列化器对数据进行序列化

现在我们可以使用CommentSerializer来序列化一个评论,或者评论的列表。同样,使用序列化器类看起来很像使用表单类。让我们先创建一个Comment类来创建一个可以被我们的序列化器理解的Comment类型的对象。

# import datetime object
from datetime import datetime
 
# create a class
class Comment(object):
    def __init__(self, email, content, created = None):
        self.email = email
        self.content = content
        self.created = created or datetime.now()
# create a object
comment = Comment(email ='leila@example.com', content ='foo bar')

现在我们的对象已经准备好了,让我们试着将这个注释对象序列化。运行下面的命令。

Python manage.py shell

现在运行以下代码

# import comment serializer
>>> from apis.serializers import CommentSerializer

# import datetime for date and time
>>> from datetime import datetime

# create a object
>>> class Comment(object):
...     def __init__(self, email, content, created=None):
...         self.email = email
...         self.content = content
...         self.created = created or datetime.now()
... 

# create a comment object
>>> comment = Comment(email='leila@example.com', content='foo bar')

# serialize the data
>>> serializer = CommentSerializer(comment)

# print serialized data
>>> serializer.data

现在让我们检查一下这个的输出。

创建和使用序列化器 - Django REST框架

我们可以使用Python的内置函数或rest框架的解析器将这些数据转换成JSON或XML格式。

# import JSON Renderer
from rest_framework.renderers import JSONRenderer
 
# convert data to JSON
json = JSONRenderer().render(serializer.data)

使用序列化器来反序列化数据

反序列化与序列化类似。它意味着将数据从JSON格式转换为一个给定的数据类型。首先,我们把一个流解析成Python本地数据类型……(定义要反序列化的数据类型….)
首先,我们需要将这些json数据转换为可以被序列化器理解的数据,以便进行反序列化。

import io
from rest_framework.parsers import JSONParser
 
stream = io.BytesIO(json)
data = JSONParser().parse(stream)

现在让我们把数据反序列化为原始状态

serializer = CommentSerializer(data = data)
serializer.is_valid()
# True
serializer.validated_data

让我们检查输出和数据是否已经被反序列化:

创建和使用序列化器 - Django REST框架

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程