📌  相关文章
📜  序列化器字段 – Django REST 框架

📅  最后修改于: 2022-05-13 01:55:30.014000             🧑  作者: Mango

序列化器字段 – Django REST 框架

序列化器带有一些字段(条目),用于处理进出 Django REST 框架中的序列化器的数据。序列化的动机是将数据库数据转换为 javascript 可以使用的数据类型。例如,如果您有一个名为 Employee 的类,其字段为 Employee_id、Employee_name、is_admin 等。那么,您将需要 AutoField、CharField 和 BooleanField 来通过 Django 存储和操作数据。一个人需要多个字段来对数据进行默认验证,即,一个人会使用 EmailField 来存储电子邮件,因为它会验证数据到一个电子邮件地址。
本文围绕可在 Django REST 框架的序列化程序中使用的多个字段以及如何使用它们展开。 Django REST 框架中的序列化器字段可分为以下几类 -

  • 布尔字段
  • 字符串字段
  • 数值字段
  • 日期和时间字段
  • 选择选择字段
  • 文件上传字段
  • 序列化器字段
  • 序列化器字段中的核心参数

布尔字段

布尔字段有两个主要字段 - BooleanField 和 NullBooleanField。

布尔字段

用于包装TrueFalse值的布尔字段。它的工作原理与 BooleanField – Django 模型相同。默认情况下,创建的 serializers.BooleanField 实例默认为 False。
句法 -

field_name = serializers.BooleanField() 

Null布尔字段

接受TrueFalseNull值的布尔字段。它的工作原理与 NullBooleanField – Django 模型相同。默认情况下,serializers.NullBooleanField 实例默认创建为无。
句法 -

field_name = serializers.NullBooleanField()

要查看更多信息,请访问 – 序列化程序中的布尔字段 – Django REST 框架

字符串字段

共有三个主要字段——CharField、EmailField 和 RegexField。

字符域

CharField 用于存储文本表示。可选择验证文本是否短于 max_length 且长于 min_length。它的工作原理与 CharField – Django 模型相同。
它有以下论点——

  • max_length – 验证输入包含的字符数不超过此数量。
  • min_length – 验证输入包含不少于此数量的字符。
  • allow_blank – 如果设置为 True,则空字符串应被视为有效值。如果设置为 False,则空字符串被视为无效,并会引发验证错误。默认为假。
  • trim_whitespace - 如果设置为 True 则修剪前导和尾随空格。默认为真。

句法 -

field_name = serializers.CharField(*args, **kwargs) 

电子邮件字段

EmailField 也是一种文本表示形式,它验证文本是否为有效的电子邮件地址。它与 EmailField – Django 模型相同。它采用 CharField 的所有参数来实现相同的功能。
句法 -

field_name = serializers.EmailField(*args, **kwargs) 

正则表达式字段

正如名称所定义的,RegexField 将字符串与特定的正则表达式匹配,否则会引发错误。它与 RegexField – Django Forms 相同。它采用 CharField 的所有参数来实现相同的功能。
句法 -

field_name = serializers.RegexField(*args, **kwargs)

要查看更多信息,请访问 – 序列化程序中的字符串字段 – Django REST 框架

网址字段

有两个主要字段——URLField 和 SlugField。

网址字段

URLField 基本上是一个 RegexField,它根据 URL 匹配模式验证输入。期望格式为 http:/// 的完全限定 URL。它的工作原理与 URLField – Django 模型相同

它有以下论点——

  • allow_blank – 如果设置为 True,则空字符串应被视为有效值。如果设置为 False,则空字符串被视为无效,并会引发验证错误。默认为假。

句法 -

field_name = serializers.URLField(*args, **kwargs) 

蛞蝓场

SlugField 是一个 RegexField,它根据模式 [a-zA-Z0-9_-]+ 验证输入。它与 SlugField – Django 模型相同。

句法 -

field_name = serializers.SlugField(*args, **kwargs)

要查看更多信息,请访问 - 序列化程序中的 URL 字段 - Django REST 框架

数值字段

有三个主要字段——IntegerField、FloatField 和 DecimalField。

整数字段

IntegerField 基本上是一个整数字段,用于根据 Python 的int实例验证输入。它与 IntegerField – Django 模型相同

它有以下论点——

  • max_value验证提供的数字不大于此值。
  • min_value验证提供的数字不小于此值。

句法 -

field_name = serializers.IntegerField(*args, **kwargs) 

浮点场

FloatField 基本上是一个浮点字段,它根据 Python 的浮点实例验证输入。它与 FloatField – Django 模型相同

它有以下论点——

  • max_value验证提供的数字不大于此值。
  • min_value验证提供的数字不小于此值。

句法 -

field_name = serializers.FloatField(*args, **kwargs) 

十进制字段

DecimalField 基本上是一个十进制字段,用于根据 Python 的十进制实例验证输入。它与 DecimalField – Django 模型相同

它有以下论点——

  • max_digits数字中允许的最大位数。它必须是 None 或大于或等于 decimal_places 的整数。
  • decimal_places与数字一起存储的小数位数。
  • max_value验证提供的数字不大于此值。
  • min_value验证提供的数字不小于此值。
  • localize设置为 True 以启用基于当前语言环境的输入和输出本地化。

句法 -

field_name = serializers.DecimalField(*args, **kwargs)

要查看更多信息,请访问 – 序列化程序中的数字字段 – Django REST 框架

日期和时间字段

有四个主要字段 - DateTimeField、DateField、TimeField 和 DurationField。

日期时间字段

DateTimeField 是用于日期和时间表示的序列化器字段。它与 – DateTimeField – Django 模型相同

它有以下论点——

  • format -- 表示输出格式的字符串。如果未指定,则默认为与 DATETIME_FORMAT 设置键相同的值,除非设置,否则将为“iso-8601”。设置为格式字符串表示 to_representation 返回值应强制转换为字符串输出。格式字符串如下所述。将此值设置为 None 表示Python日期时间对象应由 to_representation 返回。在这种情况下,日期时间编码将由渲染器确定。
  • input_formats – 表示可用于解析日期的输入格式的字符串列表。如果未指定,将使用 DATETIME_INPUT_FORMATS 设置,默认为 ['iso-8601']。
  • default_timezone -- 代表时区的 pytz.timezone。如果未指定并且启用了 USE_TZ 设置,则默认为当前时区。如果 USE_TZ 被禁用,那么 datetime 对象将是幼稚的。

句法 -

field_name = serializers.DateTimeField(*args, **kwargs) 

日期字段

DateField 是用于日期表示的序列化器字段。通常,需要存储日期,例如在博客模型中,每个帖子的日期都需要存储。此字段与 DateField – Django 模型相同
它有以下论点——

  • format -- 表示输出格式的字符串。如果未指定,则默认为与 DATE_FORMAT 设置键相同的值,除非设置,否则将为“iso-8601”。设置为格式字符串表示 to_representation 返回值应强制转换为字符串输出。格式字符串如下所述。将此值设置为 None 表示Python日期对象应由 to_representation 返回。在这种情况下,日期编码将由渲染器确定。
  • input_formats – 表示可用于解析日期的输入格式的字符串列表。如果未指定,将使用 DATE_INPUT_FORMATS 设置,默认为 ['iso-8601']。

句法 -

field_name = serializers.DateField(*args, **kwargs) 

时间场

Timefield 是用于时间表示的序列化器字段。通常,需要存储日期,例如在博客模型中,每个帖子的时间都需要存储。

它有以下论点——

  • format -- 表示输出格式的字符串。如果未指定,则默认为与 TIME_FORMAT 设置键相同的值,除非设置,否则将为“iso-8601”。设置为格式字符串表示 to_representation 返回值应强制转换为字符串输出。格式字符串如下所述。将此值设置为 None 表示Python时间对象应由 to_representation 返回。在这种情况下,时间编码将由渲染器确定。
  • input_formats – 表示可用于解析日期的输入格式的字符串列表。如果未指定,将使用 TIME_INPUT_FORMATS 设置,默认为 ['iso-8601']。

句法 -

field_name = serializers.TimeField(*args, **kwargs) 

持续时间字段

DurationField 是用于表示持续时间的序列化器字段。该字段与 DurationField – Django 模型相同
它有以下论点——

  • max_value验证提供的持续时间不大于此值。
  • min_value验证提供的持续时间不小于此值。

句法 -

field_name = serializers.DurationField(*args, **kwargs)

要查看更多信息,请访问 - 序列化程序中的日期和时间字段 - Django REST 框架

选项选择字段

有两个主要字段——Choice 和MultipleChioceField。

选择字段

ChoiceField 基本上是一个 CharField,它根据一组有限选项中的值验证输入。该字段与 ChoiceField – Django Forms 相同。

它有以下论点——

  • 选择- 有效值列表,或 (key, display_name) 元组列表。
  • allow_blank – 如果设置为 True,则空字符串应被视为有效值。如果设置为 False,则空字符串被视为无效,并会引发验证错误。默认为假。
  • html_cutoff – 如果设置,这将是 HTML 选择下拉菜单显示的最大选项数。可用于确保自动生成的具有非常大的可能选择的 ChoiceFields 不会阻止模板呈现。默认为无。
  • html_cutoff_text - 如果设置,如果在 HTML 选择下拉列表中已截断最大项目数,则将显示文本指示符。默认为“超过 {count} 个项目……”

句法 -

field_name = serializers.ChoiceField(*args, **kwargs) 

多选字段

ChoiceField 基本上是一个 CharField,它根据从一组有限的选项中选择的一组零、一个或多个值来验证输入。该字段与 MultipleChoiceField – Django Forms 相同。

句法 -

field_name = serializers.MultipleChoiceField(*args, **kwargs)

要查看更多信息,请访问 - 序列化程序中的选择选择字段 - Django REST 框架

文件上传字段

有两个主要字段 - FileField 和 ImageField。

文件字段

FileField 基本上是一种文件表示。它执行 Django 的标准 FileField 验证。该字段与 FileField – Django Models 相同。

它有以下论点——

  • max_length – 指定文件名的最大长度。
  • allow_empty_file – 指定是否允许空文件。
  • use_url – 如果设置为 True,则 URL字符串值将用于输出表示。如果设置为 False,则文件名字符串值将用于输出表示。默认为 UPLOADED_FILES_USE_URL 设置键的值,除非另有设置,否则为 True。

句法 -

field_name = serializers.FileField(*args, **kwargs) 

图像域

ImageField 是一种图像表示。它验证上传的文件内容是否匹配已知的图像格式。这与 ImageField – Django 表单相同

它有以下论点——

  • max_length – 指定文件名的最大长度。
  • allow_empty_file – 指定是否允许空文件。
  • use_url – 如果设置为 True,则 URL字符串值将用于输出表示。如果设置为 False,则文件名字符串值将用于输出表示。默认为 UPLOADED_FILES_USE_URL 设置键的值,除非另有设置,否则为 True。

句法 -

field_name = serializers.ImageField(*args, **kwargs)

要查看更多信息,请访问 – 序列化程序中的文件上传字段 – Django REST 框架

序列化器字段

.math-table { 边框折叠:折叠;宽度:100%; } .math-table td { 边框:1px 实心 #5fb962;文本对齐:左!重要;填充:8px; } .math-table th { 边框:1px 实心 #5fb962;填充:8px; } .math-table tr>th{ 背景颜色:#c6ebd9;垂直对齐:中间; } .math-table tr:nth-child(odd) { background-color: #ffffff; }

Field NameDescription
BooleanFieldA boolean field used to wrap True or False values.
NullBooleanFieldA boolean field that accepts True, False and Null values.
CharFieldCharField is used to store text representation.
EmailFieldEmailField is also a text representation and it validates the text to be a valid e-mail address.
RegexFieldAs the name defines, RegexField matches the string to a particular regex, else raises an error.
URLFieldURLField is basically a RegexField that validates the input against a URL matching pattern.
SlugFieldSlugField is a RegexField that validates the input against the pattern [a-zA-Z0-9_-]+.
IPAddressFieldIPAddressField is a field that ensures the input is a valid IPv4 or IPv6 string.
IntegerFieldIntegerField is basically a integer field that validates the input against Python’s int instance.
FloatFieldFloatField is basically a float field that validates the input against Python’s float instance.
DecimalFieldDecimalField is basically a decimal field that validates the input against Python’s decimal instance.
DateTimeFieldDateTimeField is a serializer field used for date and time representation.
DateFieldDateField is a serializer field used for date representation.
TimeFieldTimefield is a serializer field used for time representation.
DurationFieldDurationField is a serializer field used for duration representation.
ChoiceFieldChoiceField is basically a CharField that validates the input against a value out of a limited set of choices.
MultipleChoiceFieldMultipleChoiceField is basically a CharField that validates the input against a set of zero, one or many values, chosen from a limited set of choices.
FileFieldFileField is basically a file representation. It performs Django’s standard FileField validation.
ImageFieldImageField is an image representation.It validates the uploaded file content as matching a known image format.
ListFieldListField is basically a list field that validates the input against a list of objects.
JSONFieldJSONField is basically a field class that validates that the incoming data structure consists of valid JSON primitives.
HiddenFieldHiddenField is a field class that does not take a value based on user input, but instead takes its value from a default value or callable.
DictFieldDictField is basically a dictionary field that validates the input against a dictionary of objects.

序列化器字段中的核心参数

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

.math-table { 边框折叠:折叠;宽度:100%; } .math-table td { 边框:1px 实心 #5fb962;文本对齐:左!重要;填充:8px; } .math-table th { 边框:1px 实心 #5fb962;填充:8px; } .math-table tr>th{ 背景颜色:#c6ebd9;垂直对齐:中间; } .math-table tr:nth-child(odd) { background-color: #ffffff; }

ArgumentDescription
read_onlySet this to True to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization
write_onlySet this to True to ensure that the field may be used when updating or creating an instance, but is not included when serializing the representation.
requiredSetting this to False also allows the object attribute or dictionary key to be omitted from output when serializing the instance.
defaultIf set, this gives the default value that will be used for the field if no input value is supplied.
allow_nullNormally an error will be raised if None is passed to a serializer field. Set this keyword argument to True if None should be considered a valid value.
sourceThe name of the attribute that will be used to populate the field.
validatorsA list of validator functions which should be applied to the incoming field input, and which either raise a validation error or simply return.
error_messagesA dictionary of error codes to error messages.
labelA short text string that may be used as the name of the field in HTML form fields or other descriptive elements.
help_textA text string that may be used as a description of the field in HTML form fields or other descriptive elements.
initialA value that should be used for pre-populating the value of HTML form fields.