Python-Eve служит изображениям

Добрый день! У меня есть REST API, основанный на фреймворке Python-Eve. Мне нужно обслуживать изображения, такие как простое приложение Flask (причина в том, что не нужно запускать два сервера). Я перемещаю REST API в префикс «api» и делаю простую функцию для обслуживания статических файлов:

from flask import send_from_directory
import eve

app = eve.Eve()

@app.route('/images/<path:path>')
def serve_static(path):
    return send_from_directory('images', path)

if __name__ == '__main__':
    app.run()

Но это не работает и выдает ошибку 404. Когда я заменяю send_from_directory на что-то более простое, например return "Hello", все работает нормально. Любая идея, как реализовать это правильно? Заранее спасибо.


person drjackild    schedule 29.10.2015    source источник


Ответы (2)


из-за фляги, где находится папка «изображение», вы должны четко указать ее. например из конфигурации.

официальный документ: send_from_directory

официальный пример:

@app.route('/uploads/<path:filename>')
def download_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename, as_attachment=True)
person lord63. j    schedule 29.10.2015

Я решаю эту проблему с помощью функции send_file из пакета flask.

Это мой код:

import os
from flask import send_file, abort, request
import eve

from settings import BASE_DIR

app = eve.Eve()


@app.route('/images')
def serve_images():
    if request.args.get('path'):
        path = os.path.join(BASE_DIR, 'app', 'images', request.args.get('path'))
    else:
        abort(403)
    return send_file(path)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

Этот подход очень полезен для меня, потому что я могу отправлять файлы, которые остались за пределами папки приложения flask.

person drjackild    schedule 29.10.2015