序列化器 – Django REST框架

序列化器 – Django REST框架

Django REST框架中的序列化器负责将对象转换为javascript和前端框架所能理解的数据类型。序列化器还提供了反序列化的功能,在首先验证了传入的数据后,允许将解析的数据转换回复杂的类型。REST框架中的序列化器与Django的Form和ModelForm类的工作非常相似。最常用的两个主要序列化器是ModelSerializer和HyperLinkedModelSerialzer。
这篇文章围绕着如何在Django REST框架中从头开始使用序列化器,到高级序列化器字段和参数。假设你已经熟悉了如何用Django REST框架开始一个项目?

  • 创建和使用序列化器
  • ModelSerializer
  • HyperLinkedModelSerializer
  • Serializer Fields
  • 串行器字段中的核心参数

创建和使用序列化器

创建一个基本的串行器

要创建一个基本的序列化器,需要从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框架

要查看更多关于如何创建和使用串行器的信息,请访问 – 创建和使用串行器

ModelSerializer

ModelSerializer类提供了一个快捷方式,让你自动创建一个Serializer类,其字段与Model字段对应。

ModelSerializer类与普通的Serializer类相同,只是。

  • 它将根据模型自动为你生成一组字段。
  • 它将自动为序列化器生成验证器,例如唯一的验证器。
  • 它包括.create()和.update()的简单默认实现。

语法 –

class SerializerName(serializers.ModelSerializer):
    class Meta:
        model = ModelName
        fields = List of Fields

示例 –

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ['id', 'account_name', 'users', 'created']

默认情况下,类上的所有模型字段将被映射到相应的序列化器字段。
要检查如何在你的项目中使用ModelSerializer,请访问 – ModelSerializer in serializers – Django REST Framework 。

HyperlinkedModelSerializer

HyperlinkedModelSerializer类与ModelSerializer类类似,只是它使用超链接来表示关系,而不是主键。默认情况下,序列化器将包括一个url字段,而不是一个主键字段。url字段将使用HyperlinkedIdentityField序列化器字段来表示,模型上的任何关系将使用HyperlinkedRelatedField序列化器字段表示。

语法 –

class SerializerName(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = ModelName
        fields = List of Fields

示例 –

class AccountSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Account
        fields = ['id', 'account_name', 'users', 'created']

要检查如何在你的项目中使用HyperLinkedModelSerializer,请访问 – HyperlinkedModelSerializer in serializers – Django REST Framework 。

Serializer Fields

字段名称 描述
BooleanField 一个布尔字段,用于包装真或假的值。
NullBooleanField 一个接受True、False和Null值的布尔字段。
CharField CharField用于存储文本表示法。
EmailField EmailField也是一个文本表示法,它验证了文本是一个有效的电子邮件地址。
RegexField 顾名思义,RegexField将字符串与一个特定的重合词相匹配,否则会引发错误。
URLField URLField基本上是一个RegexField,它根据一个URL匹配模式验证输入。
SlugField SlugField是一个RegexField,根据模式[a-zA-Z0-9_-]+验证输入。
IPAddressField IPAddressField是一个字段,确保输入是有效的IPv4或IPv6字符串。
IntegerField IntegerField 基本上是一个整数字段,根据 Python 的 int 实例验证输入。
FloatField FloatField 基本上是一个浮点字段,根据 Python 的浮点实例验证输入。
DecimalField DecimalField 基本上是一个十进制字段,根据 Python 的十进制实例验证输入。
DateTimeField DateTimeField是一个序列化字段,用于表示日期和时间。
DateField DateField是一个序列化字段,用于表示日期。
TimeField Timefield是一个用于表示时间的序列化字段。
DurationField DurationField是一个用于表示持续时间的序列化字段。
ChoiceField ChoiceField基本上是一个CharField,它根据一组有限的选择中的一个值来验证输入。
MultipleChoiceField MultipleChoiceField基本上是一个CharField,它根据一组从有限的选择中选出的0、1或多个值来验证输入。
FileField FileField基本上是一个文件表示。它执行Django的标准FileField验证。
ImageField ImageField是一种图像表示法。它验证上传的文件内容是否符合已知的图像格式。
ListField ListField 基本上是一个列表字段,根据一个对象的列表来验证输入。
JSONField JSONField基本上是一个字段类,用于验证传入的数据结构是否由有效的JSON原语组成。
HiddenField HiddenField是一个不根据用户输入取值的字段类,而是从默认值或可调用值取值。
DictField DictField基本上是一个字典字段,它根据对象的字典来验证输入。

串行器字段中的核心参数

Django中的序列化字段与Django表格字段和Django模型字段相同,因此需要某些参数来操作这些字段的行为。

参数 说明
read_only 将此设置为True,以确保在序列化表示时使用该字段,但在反序列化期间创建或更新实例时不使用该字段。
Write_only 将此设置为True,以确保在更新或创建实例时可以使用该字段,但在序列化表示时不包括在内。
required 将此设置为False也允许在序列化实例时从输出中省略对象属性或字典键。
default 如果设置,这将给出默认值,如果没有提供输入值,将用于该字段。
allow_null 通常情况下,如果None被传递给一个序列化器字段,将会产生一个错误。如果None被认为是一个有效的值,请将这个关键字参数设置为True。
source 将被用于填充字段的属性名称。
validators 一个验证器函数的列表,这些函数应该应用于输入的字段,它们要么引发一个验证错误,要么简单地返回。
error_messages 一个错误代码的字典,用于错误信息。
label 一个简短的文本字符串,可作为HTML表格字段或其他描述性元素中的字段名称。
help_text 一个文本字符串,可作为HTML表单字段或其他描述性元素的描述。
initial 一个应该用于预先填充HTML表格字段的值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程