编程语言
首页 > 编程语言> > python – 从模型中获取JSONAPI模式

python – 从模型中获取JSONAPI模式

作者:互联网

在我的Rest应用程序中,我希望像JSONAPI格式一样返回json,但是我需要为它创建Schema类并再次创建我模型中已经存在的每个字段.因此,我不能在模型类中创建每个字段,而不是从DB模型中获取它.
下面是我的模特课

class Author(db.Model):
  id = db.Column(db.Integer)
  name = db.Column(db.String(255))

我在下面定义Schema.

class AuthorSchema(Schema):
    id = fields.Str(dump_only=True)
    name = fields.Str()
    metadata = fields.Meta()

    class Meta:
        type_ = 'people'
        strict = True

所以在这里,id和name我已经定义了两次.所以在marshmallow-jsonapi中有任何选项可以在模式类中指定模型名称,因此它可以从模型中获取所有字段
注意:我正在使用marshmallow-jsonapifor它,我已经尝试过marshmallow-sqlalchemy,它有这个选项,但它不会以JSONAPI格式返回json

解决方法:

您可以将flask-marshmallow的ModelSchema和marshmallow-sqlalchemy与marshmallow-jsonapi结合起来使用警告,您必须继承子类不仅包括Schema类,还包括SchemaOpts类,如下所示:

# ...
from flask_marshmallow import Marshmallow
from marshmallow_jsonapi import Schema, SchemaOpts
from marshmallow_sqlalchemy import ModelSchemaOpts


# ...

ma = Marshmallow(app)

# ...

class JSONAPIModelSchemaOpts(ModelSchemaOpts, SchemaOpts):
    pass


class AuthorSchema(ma.ModelSchema, Schema):
    OPTIONS_CLASS = JSONAPIModelSchemaOpts

    class Meta:
        type_ = 'people'
        strict = True
        model = Author

# ...
foo = AuthorSchema()
bar = foo.dump(query_results).data # This will be in JSONAPI format including every field in the model

标签:python,flask,flask-sqlalchemy,marshmallow,flask-restplus
来源: https://codeday.me/bug/20190701/1348487.html