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

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

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

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

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 который преобразует цвета в первичный и вторичный цвета в сеттер.

licensed under cc by-sa 3.0 with attribution.