sanic无法序列化datetime字段的问题

使用sanic开发web应用时,通常需要配合数据库,那就不可避免的要使用DateTimeField类型的字段,而datetime不是标准的数据类型, 无法被json序列化,因此

sanic 的response.json() 返回数据时,如果models字段有datetime类型,则会抛出 “Object of type datetime is not JSON serializable” 异常。到这应该有三百个字了吧,太难了。

解决办法:

重写JSONENcode的default方法

import json
from datetime import date, datetime

class JsonDateTime(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, obj)

使用时,只需要指定cls=JsonDateTime即可:

def ResponseSuccess(code, data):
    return json({
        'code': code,
        'msg': message.get(code),
        'data': data
    }, cls=JsonDateTime)
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章