flask-marshmallow - 如何有条件地生成HATEOAS URL

时间:2015-06-03 21:59:14

标签: python flask

我希望根据对象的当前状态选择性地返回一些url,并且有时间解决如何在Schema中公开state属性,做一些逻辑并确定要返回哪些URL对象状态:

模特:

class Car(Model):
    model = Column(String)
    year = Column(String)
    running = Column(Boolean)   #'0 = not running', '1 = running'

和架构:

class CarSchema(ma.Schema):
    class Meta:
        fields = ('model', 'year', 'running',  '_links')

    _links = ma.Hyperlinks({
        'self': ma.URLFor('car_detail', id='<id>'),
        'start': ma.URLFor('car_start', id='<id>')
        'stop': ma.URLFor('car_start', id='<id>')
    })

我想要做的是只在'running'属性为0时返回start url,并且当它为1时返回stop url,但我不清楚如何实现这一点。

Marshmallow似乎有几个装饰者似乎但是我如何利用瓶子棉花糖?

1 个答案:

答案 0 :(得分:0)

您可以使用post_dump后处理来执行此操作:检查运行状态并删除不适当的字段。这比有条件地生成它们容易得多。

class CarSchema(ma.Schema):
    class Meta:
        fields = ('model', 'year', 'running', '_links')

    _links = ma.Hyperlinks({
        'self': ma.URLFor('car_detail', id='<id>'),
        'start': ma.URLFor('car_start', id='<id>')
        'stop': ma.URLFor('car_start', id='<id>')
    })

    @ma.post_dump
    def postprocess(self, data):
        if data['running']:
            del data['_links']['start']
        else:
            del data['_links']['stop']