带有 ObjectId 的 Marshmallow URLFor BuildError
Marshmallow URLFor BuildError with ObjectId
如何使用 MongoEngine 和 Flask-Marshmallow 制作 RESTFul API HATEOAS?
我正在使用
class PraiaSerializer(ma.Schema):
id = ma.String()
atividades = ma.Nested(AtividadeSerializer, many=True)
class Meta:
additional = ('nome', 'descricao', '_links')
_links = ma.Hyperlinks({
'self': ma.URLFor('praia_detail', id='<id>'),
'collection': ma.URLFor('praias')
})
但是,当向我的路由发送请求时,marshmallow 抛出一个 BuildError。
BuildError: ('atividade_detail', MultiDict([('id', ObjectId('55024fdfe138235aeac01380'))]), None)
我该怎么办?
我是不是向 ma.Hyperlinks
传递了错误的信息?
解决了我的问题!
我正在使用 Flask-RESTFul 编写我的 API,因此我必须使用端点名称注册我的路由。如果使用纯 Flask,请使用您的函数名称。
api.add_resource(PraiaListView, '/v1/praias', endpoint='praias_resource')
api.add_resource(PraiaView, '/v1/praias/<id>', endpoint='praia_detail')
并使用:
_links = ma.Hyperlinks({
'self': ma.URLFor('praia_detail', id='<id>'),
'collection': ma.URLFor('praias_resource')
})
因此 marshmallow 可以为 _links 字段生成此输出:
"_links": {
"collection": "/v1/praias",
"self": "/v1/praias/55025029e138235aeac01383"
},
如何使用 MongoEngine 和 Flask-Marshmallow 制作 RESTFul API HATEOAS?
我正在使用
class PraiaSerializer(ma.Schema):
id = ma.String()
atividades = ma.Nested(AtividadeSerializer, many=True)
class Meta:
additional = ('nome', 'descricao', '_links')
_links = ma.Hyperlinks({
'self': ma.URLFor('praia_detail', id='<id>'),
'collection': ma.URLFor('praias')
})
但是,当向我的路由发送请求时,marshmallow 抛出一个 BuildError。
BuildError: ('atividade_detail', MultiDict([('id', ObjectId('55024fdfe138235aeac01380'))]), None)
我该怎么办?
我是不是向 ma.Hyperlinks
传递了错误的信息?
解决了我的问题!
我正在使用 Flask-RESTFul 编写我的 API,因此我必须使用端点名称注册我的路由。如果使用纯 Flask,请使用您的函数名称。
api.add_resource(PraiaListView, '/v1/praias', endpoint='praias_resource')
api.add_resource(PraiaView, '/v1/praias/<id>', endpoint='praia_detail')
并使用:
_links = ma.Hyperlinks({
'self': ma.URLFor('praia_detail', id='<id>'),
'collection': ma.URLFor('praias_resource')
})
因此 marshmallow 可以为 _links 字段生成此输出:
"_links": {
"collection": "/v1/praias",
"self": "/v1/praias/55025029e138235aeac01383"
},