Как настроить загрузку двоичных объектов через конечную точку flask_restless? - PullRequest
0 голосов
/ 18 сентября 2018

Я работаю над приложением REST python и выбрал flask_restless для создания конечных точек, подключенных к базе данных.Одной из таблиц, которыми я хотел бы управлять, является хранение двоичных файлов в виде больших двоичных объектов (LargeBinary).Однако я заметил, что для flask_restless требуются данные json для запросов POST.Я попытался применить base64 к содержимому двоичного файла и обернуть его с помощью json, но в конечном итоге flask_restless передал содержимое файла в sqlalchemy в виде строки, а бэкэнд SQLite пожаловался на то, что он требует байтового ввода (совершенно правильно).Я попытался найти решение для поиска в Интернете, но либо я неправильно формулирую свой запрос, либо его фактически нет.

Итак, есть ли способ настроить конечную точку, управляемую с помощью flask_restless, для приема двоичного файла какприложение?Или, скорее, предлагаемое решение состояло бы в том, чтобы настроить конечную точку для этой конкретной таблицы непосредственно с помощью flask (я делал это раньше в другом приложении), вдали от flask_restless?

1 Ответ

0 голосов
/ 12 октября 2018

Оказывается, отправка вложения невозможна.Поэтому я углубился в вопрос о том, как отправлять вложения в кодировке base64, которые затем будут сохраняться в виде больших двоичных объектов.

Для этого я использовал средство предварительной и последующей обработки flask_restless:

def pp_get_single_image(result=None, **kw):
    import base64
    result['image'] = base64.b64encode(result['image']).decode('utf8')

def pp_get_many_images(result=None, search_params=None, **kw):
    result['objects'] = [pp_get_single_image(d) or d for d in result['objects']]

def pp_post_image_in(data=None, **kw):
    import base64
    data['image'] = base64.b64decode(data['image'])

def pp_post_image_out(result=None, **kw):
    import base64
    result['image'] = base64.b64encode(result['image']).decode('utf8')

postprocessors=dict(GET_SINGLE=[pp_get_single_image], GET_MANY=[pp_get_many_images], POST=[pp_post_image_out])
preprocessors=dict(POST=[pp_post_image_in])

manager = flask_restless.APIManager(app, flask_sqlalchemy_db=db)
manager.create_api(Image, methods=['GET', 'POST', 'DELETE'],
               postprocessors=pp_image.postprocessors,
               preprocessors=pp_image.preprocessors)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...