gpt4 book ai didi

python - 结合 Flask-Marshmallow 和 marshmallow-jsonapi

转载 作者:行者123 更新时间:2023-12-03 16:58:41 25 4
gpt4 key购买 nike

概览

我正在使用 Flask-SqlAlchemy,现在我正在研究 marshmallow 来帮助我序列化和反序列化请求数据。

我能够成功:

  1. 使用 Flask-SqlAlchemy

    创建我的模型
  2. 使用 Flask-Marshmallow 使用相同的模型序列化数据库对象,方法是使用 Optional Flask-SqlAlchemy Integration

  3. 使用 ma​​rshmallow-jsonapi 快速生成符合 Json API 的响应。这需要我 declare new Schemas指定我想要包含哪些属性(这与 Flask-SqlAlchemy 模型重复)

代码示例

Flask-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'}
}

问题

如代码所示,ma​​rshmallow-jsonapi 允许我创建符合 json api 的响应,但我最终不得不维护一个声明模型 + 模式响应模型。

flask-marshmallow 允许我从 SqlAlchemy 模型创建架构响应,因此我不必为每个模型维护一组单独的属性。


问题

是否可以同时使用 flask-marshmallowma​​rshmallow-jsonapi 1. 从 SqlAlchemy 模型创建 Marshmallow Schema,AND 自动生成 json api 响应?

我尝试创建从 ma.ModelSchemamarshmallow_json.Schema 继承的 Schema 声明,在这两个顺序中,但它不起作用(引发缺少方法和属性的异常)


marshmallow-jsonapi

marshmallow-jsonapi provides a simple way to produce JSON API-compliant data in any Python web framework.

flask-marshmallow

Flask-Marshmallow includes useful extras for integrating with Flask-SQLAlchemy and marshmallow-sqlalchemy.

最佳答案

不是这个确切问题的解决方案,但我在实现这个库时遇到了类似的问题:https://github.com/thomaxxl/safrs (sqlalchemy + flask-restful + jsonapi 兼容规范)。我不记得我是如何绕过它的,但是如果你尝试它并且序列化不起作用,如果你在 github 中打开一个问题,我可以帮助你解决它

关于python - 结合 Flask-Marshmallow 和 marshmallow-jsonapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48602128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com