Пользовательские аргументы в Flask-Restless?

Flask-Restless принимает только аргументы, которые являются столбцами, определенными в модели SQLAlchemy. Я хочу взять что-то вроде blue green и сохранить его в двух столбцах primary_color и secondary_color.

Прямо сейчас я отправляю данные как primary_color (разрешенное поле) и использую postprocessor, чтобы разделить их на primary_color и secondary_color.

Можно ли сделать что-то более чистое и более семантическое, например POST для поля colors, а затем обработать его?


person Patrick Yan    schedule 18.03.2014    source источник


Ответы (1)


Запускаются препроцессоры запросов перед проверкой данных 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 не жаловался на наличие ключа.

Постпроцессор здесь никогда бы не сработал; они вызываются только для изменения возвращаемого ответа после того, как новый экземпляр уже создан.

В качестве альтернативы создайте гибридный атрибут SQLAlchemy с именем colors, переводит цвета в первичные и вторичные цвета в сеттере.

person Martijn Pieters    schedule 18.03.2014
comment
Отличное объяснение. Спасибо! - person Patrick Yan; 19.03.2014