flask -marshmallow сериализует дату / время в unix метку времени? - PullRequest
2 голосов
/ 03 февраля 2020

По умолчанию поля 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')

1 Ответ

0 голосов
/ 04 февраля 2020

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

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

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

...