Flask-Restless中的自定义参数?

0 投票
1 回答
658 浏览
提问于 2025-04-17 22:51

Flask-Restless 只接受在 SQLAlchemy 模型中定义的列作为参数。我想把像 blue green 这样的内容存储到两个列中,分别是 primary_colorsecondary_color

目前,我是把数据作为 primary_color(这是一个允许的字段)发送的,然后使用一个 postprocessor 来把它分割成 primary_colorsecondary_color

有没有可能做得更简单、更符合逻辑,比如发送一个 colors 字段,然后再进行处理呢?

1 个回答

3

请求预处理器是在验证POST数据之前运行的。

你可以在API上设置一个预处理器,用于处理 POST 请求,这个预处理器会解析任何 colors 这个键,并直接修改 data 字典:

def preprocess_colors(data):
    colors = data.pop('colors', None)
    if colors is not None:
        # set primary and secondary colors
        data['primary_color'] = get_primary_color(color)
        data['secondary_color'] = get_secondary_color(colors)

你需要从字典中移除 colors 这个键,以防止Flask-Restless抱怨这个键还在。

后处理器在这里是没用的;它们只会在新实例创建完成后被调用,用来修改返回的响应。

另外,你可以在你的模型上创建一个名为 colorsSQLAlchemy混合属性,这个属性可以在设置时将颜色转换为主色和次色。

撰写回答