序列化器中的日期和时间字段 – Django REST框架

序列化器中的日期和时间字段 – Django REST框架

Django REST框架中,序列化的概念是将数据库数据转换为可被javascript使用的数据类型。每个序列化器都有一些将要被处理的字段(条目)。例如,如果你有一个名为Employee的类,它的字段是Employee_id, Employee_name, date等。那么,你就需要AutoField、CharField和DateField来通过Django存储和处理数据。同样的,序列化器也是以同样的原理工作的,并且拥有用于创建序列化器的字段。
本文围绕Django REST框架中序列化器的日期和时间字段展开。有四个主要字段 – DateTimeField, DateField, TimeField 和 DurationField。

DateTimeField

DateTimeField是一个用于表示日期和时间的序列化字段。它与Django模型中的DateTimeField相同。
它有以下参数 –

  • 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被禁用,那么日期时间对象将是幼稚的。

语法 –

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

DateField

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

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是一个用于表示持续时间的序列化字段。该字段与DurationField – Django Models相同。
它有以下参数 –

  • max_value 验证所提供的持续时间是否不超过这个值。
  • min_value 验证所提供的持续时间是否不低于这个值。

语法 –

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

如何在序列化器中使用日期和时间字段

为了解释日期和时间字段的用法,让我们使用相同的项目设置–《如何使用Django Rest框架创建一个基本的API?
现在你的项目中有一个叫做序列化器的文件,让我们用DatetimeField、DateField、TimeField和DurationField创建一个序列化器。

# import serializer from rest_framework
from rest_framework import serializers
 
class Geeks(object):
    def __init__(self, date_time, date, time, duration):
        self.date_time = date_time
        self.date = date
        self.time = time
        self.duration = duration
 
# create a serializer
class GeeksSerializer(serializers.Serializer):
    # initialize fields
    date_time = serializers.DateTimeField()
    date = serializers.DateField()
    time = serializers.TimeField()
    duration = serializers.DurationField()

现在让我们创建一些对象,并尝试将它们序列化,检查它们是否真的能工作,运行,-

Python manage.py shell

现在,在shell中运行以下python命令

# import everything from datetime
>>> from datetime import *

# import everything from serializers
>>> from apis.serializers import *

# create a object of type Geeks
>>> obj = Geeks(datetime.now(), date.today(), time(), timedelta(days=-1))

# serialize the object
>>> serializer = GeeksSerializer(obj)

# print serialized data
>>> serializer.data
{'date_time': '2020-03-22T13:17:27.853707Z',
 'date': '2020-03-22', 'time': '00:00:00', 
 'duration': '-1 00:00:00'}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程