概述
我使用的是烧瓶-SqlAlchemy,现在我正在研究棉花糖,以帮助我序列化和反序列化请求数据。
我成功地:
代码样本
烧瓶-SqlAlchemy炼金术声明模型
class Space(db.Model):
__tablename__ = 'spaces'
id = sql.Column(sql.Integer, primary_key=True)
name = sql.Column(sql.String)
version = sql.Column(sql.String)
active = sql.Column(sql.Boolean)flask_marshmallow模式声明(继承自SqlAlchemy模型)
ma = flask_marshmallow.Marshmallow(app)
class SpaceSchema(ma.ModelSchema):
class Meta:
model = Space
# API Response
space = Space.query.first()
return SpaceSchema().dump(space).data
# Returns:
{
'id': 123,
'version': '0.1.0',
'name': 'SpaceName',
'active': True
}marshmallow_json api -需要新的架构声明,必须手动包含每个属性和类型。
class SpaceJsonSchema(marshmallow_json.Schema):
id = fields.Str(dump_only=True)
name = fields.Str()
version = fields.Str()
active = fields.Bool()
class Meta:
type_ = 'spaces'
self_url = '/spaces/{id}'
self_url_kwargs = {'id': '<id>'}
self_url_many = '/spaces/'
strict = True
# Returns Json API Compliant
{
'data': {
'id': '1',
'type': 'spaces',
'attributes': {
'name': 'Phonebooth',
'active': True,
'version': '0.1.0'
},
'links': {'self': '/spaces/1'}
},
'links': {'self': '/spaces/1'}
}问题
如代码所示,marshmallow-jsonapi允许我创建符合json的响应,但我最终不得不维护一个声明式模型+架构响应模型。
flask-marshmallow允许我从SqlAlchemy模型创建模式响应,因此我不必为每个模型维护一组单独的属性。
问题
是否有可能同时使用flask-marshmallow和marshmallow-jsonapi,以便1.从SqlAlchemy模型创建Marshmallow,和会自动生成json响应?
我尝试以两个顺序创建从ma.ModelSchema和marshmallow_json.Schema继承的架构声明,但它不起作用(因为缺少方法和属性引发异常)。
棉花糖-jsonapi提供了一种在任何Python web框架中生成符合jsonapi的数据的简单方法。
瓶-marshmallow包括有用的额外集成与瓶-sqlalchemy和棉花糖-sqlalchemy。
发布于 2018-02-04 11:18:01
不是解决这个确切问题的解决方案,但我在实现这个库时遇到了类似的问题:https://github.com/thomaxxl/safrs (sqlalchemy +烧瓶-restful+ jsonapi兼容规范)。我不记得我到底是如何绕过它的,但是如果您尝试它并且序列化不起作用,如果您在github中打开一个问题,我可以帮助您解决它。
https://stackoverflow.com/questions/48602128
复制相似问题