我有以下资源:
class Image(Resource):
def get(self, db_name, col_name, image_id):
col = mongo_client[db_name][col_name]
image = col.find_one({'_id':ObjectId(image_id)})
try:
image['_id'] = str(image['_id'])
except TypeError:
return {'image': 'notFound'}
return {'image':image}
链接到某个端点。
但是,image
内部包含某些datetime
个对象。我可以用`json.dumps(...,default = str)来包装它,但是我发现有一种方法可以在烧瓶上实现这一点。我不清楚到底需要做什么。
特别是,我读到了:
It is possible to configure how the default Flask-RESTful JSON
representation will format JSON by providing a RESTFUL_JSON
attribute on the application configuration.
This setting is a dictionary with keys that
correspond to the keyword arguments of json.dumps().
class MyConfig(object):
RESTFUL_JSON = {'separators': (', ', ': '),
'indent': 2,
'cls': MyCustomEncoder}
但我不清楚这究竟需要放在哪里。尝试了一些事情并没有用。
编辑:
我终于解决了这个问题:
在
之后api = Api(app)
我补充说:
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
#return int(obj.strftime('%s'))
return str(obj)
elif isinstance(obj, datetime.date):
#return int(obj.strftime('%s'))
return str(obj)
return json.JSONEncoder.default(self, obj)
def custom_json_output(data, code, headers=None):
dumped = json.dumps(data, cls=CustomEncoder)
resp = make_response(dumped, code)
resp.headers.extend(headers or {})
return resp
api = Api(app)
api.representations.update({
'application/json': custom_json_output
})
答案 0 :(得分:0)
创建了Flask应用,例如像这样:
root_app = Flask(__name__)
将MyConfig
放在某个模块中,例如config.py
然后配置root_app
,如:
root_app.config.from_object('config.MyConfig')
答案 1 :(得分:0)
只需清除此内容,您只需执行以下操作即可:
app = Flask(__name__)
api = Api(app)
app.config['RESTFUL_JSON'] = {'cls':MyCustomEncoder}
这适用于普通Flask和Flask-RESTful。
注意:
1)显然,文档的以下部分不清楚:
可以配置默认的Flask-RESTful JSON 表示形式将通过提供RESTFUL_JSON属性来格式化JSON 在应用程序配置上。此设置是带有 与json.dumps()的关键字参数相对应的键。
class MyConfig(object):
RESTFUL_JSON = {'separators': (', ', ': '),
'indent': 2,
'cls': MyCustomEncoder}
2)除了'cls'参数之外,您实际上还可以覆盖json.dumps函数的任何关键字参数。