flask-marshmallow сериализовать дату и время в метку времени unix?

По умолчанию поля DateTime будут сериализованы в формате, подобном 2020-02-02T13:25:33, но я хочу сериализовать их в временную метку unix. Я прочитал документы flask-marshmallow и документы marshmallow, Я нахожу только способы настроить выходной формат даты и времени. Итак, мой вопрос в том, что я могу сделать любое простое решение для достижения этого?

У меня есть определение модели:

class Folder(CRUDMixin, db.Model):
    __tablename__ = 'folder'
    create_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    update_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)

И это определение схемы:

class FolderSchema(marshmallow.Schema):
    create_time = DateTime(format='timestamp')
    update_time = DateTime(format='timestamp')

Я нашел довольно сложный способ добиться этого, я пытаюсь найти другой простой способ.

class DateTime(fields.DateTime):
    """
    Class extends marshmallow standard DateTime with "timestamp" format.
    """

    SERIALIZATION_FUNCS = \
        fields.DateTime.SERIALIZATION_FUNCS.copy()
    DESERIALIZATION_FUNCS = \
        fields.DateTime.DESERIALIZATION_FUNCS.copy()

    SERIALIZATION_FUNCS['timestamp'] = lambda x: int(x.timestamp()) * 1000
    DESERIALIZATION_FUNCS['timestamp'] = datetime.fromtimestamp


class FolderSchema(marshmallow.Schema):
    create_time = DateTime(format='timestamp')
    update_time = DateTime(format='timestamp')

person einverne    schedule 03.02.2020    source источник


Ответы (1)


То, как вы это делаете, имеет смысл.

Вы можете исправить DateTime вместо того, чтобы переопределять его, чтобы упростить импорт в вашем приложении. Просто измените fields.DateTime.SERIALIZATION_FUNCS и fields.DateTime.DESERIALIZATION_FUNCS и все готово.

Сериализация в/из временной метки — это старый TODO, но мы с ним еще не закончили:

person Jérôme    schedule 04.02.2020