Flask 学习-72.Flask-RESTX 自定义输出日期格式

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask 学习-72.Flask-RESTX 自定义输出日期格式相关的知识,希望对你有一定的参考价值。

前言

DateTime类型可以支持2种时间格式 RFC 822 和 ISO 8601,如果需要输出自己想要的格式,需要自定义日期类型。

日期格式

DateTime类型可以支持2种时间格式 RFC 822 和 ISO 8601

demo_model = api.model('DemoModel', 
     # ......
    'create_time': fields.DateTime(readOnly=True, dt_format='iso8601'),
    'update_time': fields.DateTime(readOnly=True, dt_format='rfc822'),
)

序列化后输出的日期显示

 "create_time": "2022-09-22T12:05:05",
 "update_time": "Thu, 22 Sep 2022 12:05:05 -0000"

我们想要的日期类型2022-09-22 12:05:05

自定义日期类

自定义一个字段,继承fields.DateTime

class CustomDate(fields.DateTime):
    '''
    自定义CustomDate,原有的fileds.DateTime序列化后
    只支持 rfc822,ios8601 格式,新增 strftime 格式
    strftime格式下支持 format 参数,默认为 '%Y-%m-%d %H:%M:%S'
    '''

    def __init__(self, dt_format='rfc822', format=None, **kwargs):
        super().__init__(**kwargs)
        self.dt_format = dt_format

    def format(self, value):
        if self.dt_format in ('rfc822', 'iso8601'):
            return super().format(value)
        elif self.dt_format == 'str_time':
            if isinstance(value, str):
                return value
            return value.strftime('%Y-%m-%d %H:%M:%S')

        else:
            raise Exception('Unsupported date format %s' % self.dt_format)

于是我们只需要设置参数dt_format='str_time',就可以输出自己定义的格式了。

demo_model = api.model('DemoModel', 
    'create_time': CustomDate(readOnly=True, dt_format='str_time'),
    'update_time': CustomDate(readOnly=True, dt_format='str_time'),
)

于是使用marshal_with就可以序列化成

            "create_time": "2022-09-22 12:05:05",
            "update_time": "2022-09-22 12:05:05"

以上是关于Flask 学习-72.Flask-RESTX 自定义输出日期格式的主要内容,如果未能解决你的问题,请参考以下文章

Flask 学习-30.flask_jwt_extended 自定义 token 过期返回内容

Flask 学习-45.Flask-RESTX 自定义参数校验和自定义错误内容 error_msg 使用

Flask 学习-47.Flask-RESTX 自定义响应内容marshal_with

Flask学习第10篇:自定义Form组件

3000 字 Flask 快速学习指南:从入门到开发

Flask 学习-7. make_response() 自定义响应内容