如何使用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')
    })


但是,当向我的路线发送请求时,棉花糖会抛出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')
    })


因此,棉花糖可以为_links字段生成以下输出:

"_links": {
  "collection": "/v1/praias",
  "self": "/v1/praias/55025029e138235aeac01383"
},

关于python - 棉花糖URLFor BuildError with ObjectId,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29289809/

10-12 03:08