首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将水壶与棉花糖-jsonapi混合

将水壶与棉花糖-jsonapi混合
EN

Stack Overflow用户
提问于 2018-02-03 21:13:58
回答 1查看 1.5K关注 0票数 3

概述

我使用的是烧瓶-SqlAlchemy,现在我正在研究棉花糖,以帮助我序列化和反序列化请求数据。

我成功地:

  1. 使用Flask-SqlAlchemy创建我的模型
  2. 使用Flask-Marshmallow通过使用可选瓶-SqlAlchemy集成来序列化使用相同模型的数据库对象
  3. 使用marshmallow-jsonapi快速生成符合Json的响应。这要求我使用声明新模式来指定我想要包含哪些属性(这是来自Flask模型的重复)。

代码样本

烧瓶-SqlAlchemy炼金术声明模型

代码语言:javascript
复制
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模型)

代码语言:javascript
复制
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 -需要新的架构声明,必须手动包含每个属性和类型。

代码语言:javascript
复制
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-marshmallowmarshmallow-jsonapi,以便1.从SqlAlchemy模型创建Marshmallow,会自动生成json响应?

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

棉花糖-jsonapi

棉花糖-jsonapi提供了一种在任何Python web框架中生成符合jsonapi的数据的简单方法。

水壶-棉花糖

瓶-marshmallow包括有用的额外集成与瓶-sqlalchemy和棉花糖-sqlalchemy。

EN

回答 1

Stack Overflow用户

发布于 2018-02-04 11:18:01

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48602128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档