从模型中获取 JSONAPI 模式
Take JSONAPI schema from model
在我的 Rest 应用程序中,我想 return json
像 JSONAPI
格式,但我需要为其创建架构 class 并再次创建每个字段已经在我的 model
中了。因此,与其在模式 class 中创建每个字段,不如从 DB Model
中获取它。
下面是我的模型 class
class Author(db.Model):
id = db.Column(db.Integer)
name = db.Column(db.String(255))
我正在如下定义架构。
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
中是否有任何选项可以在模式 class 中分配模型名称,因此它可以从 model
中获取所有字段
注意:我正在为它使用 marshmallow-jsonapi
,我试过 marshmallow-sqlalchemy
,它有那个选项但它不是 return json
JSONAPI
格式
您可以将 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
在我的 Rest 应用程序中,我想 return json
像 JSONAPI
格式,但我需要为其创建架构 class 并再次创建每个字段已经在我的 model
中了。因此,与其在模式 class 中创建每个字段,不如从 DB Model
中获取它。
下面是我的模型 class
class Author(db.Model):
id = db.Column(db.Integer)
name = db.Column(db.String(255))
我正在如下定义架构。
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
中是否有任何选项可以在模式 class 中分配模型名称,因此它可以从 model
中获取所有字段
注意:我正在为它使用 marshmallow-jsonapi
,我试过 marshmallow-sqlalchemy
,它有那个选项但它不是 return json
JSONAPI
格式
您可以将 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