【问题标题】:Custom arguments in Flask-Restless?Flask-Restless 中的自定义参数?
【发布时间】:2014-04-24 15:22:28
【问题描述】:
Flask-Restless 只接受在 SQLAlchemy 模型中定义的列参数。我想获取类似blue green 的内容并将其存储在primary_color 和secondary_color 两列中。
现在,我将数据发布为primary_color(允许的字段)并使用postprocessor 将其拆分为primary_color 和secondary_color。
是否可以做一些更简洁、更语义化的事情,比如发布一个colors 字段,然后再对其进行处理?
【问题讨论】:
标签:
python
sqlalchemy
flask
flask-sqlalchemy
flask-restless
【解决方案1】:
Request preprocessors 在针对模型验证 POST 数据之前运行。
在 API 上为解析任何 colors 键的 POST 请求设置预处理器,就地更改 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 抱怨该键存在。
后处理器不可能在这里工作;这些仅在新实例已经创建之后被调用以改变返回的响应。
或者,在您的模型上创建一个名为 colors 的 SQLAlchemy hybrid attribute,它将颜色转换为 setter 中的主要颜色和次要颜色。