Flask Python на Google App Engine - маршруты не отвечают - PullRequest
0 голосов
/ 22 сентября 2019

Я создаю веб-приложение на python для Google App Engine.Первый маршрут работает нормально, загружая домашнюю страницу:

@app.route('/')
def index():
    return render_template('index.html')

Index.html содержит форму для загрузки файла пользователем.Теперь это одностраничное приложение, поэтому форма перенаправляется через javascript на невидимый iframe для отправки.Когда python завершает обработку файла, iframe затем вызывает функции в родительском документе, чтобы изменить отображаемое.

Функция Javascript, которая перенаправляет форму:

function redirect(elemid, tgt, sh1, sh2){
        document.getElementById(elemid).target = tgt;
        document.getElementById(elemid).submit();

        var callFunction;
        callFunction = show_and_hide(sh1, sh2);
    }

Маршрут Flask, который обрабатываетотправленная форма:

 @app.route('/upload', methods=['POST'])
 def upload_file():
    #do something with file...    
    return response

Две вещи странные: (1) Все это прекрасно работает на localhost.Форма перенаправляет на iframe и отправляет, файл обрабатывается, и ответ запускает действия родительского документа.Это просто гэ, который, кажется, не работает с этим.(2) Когда я удаляю все из функции upload_file (), чтобы она просто возвращала «hello world», все равно ничего не происходит.У меня есть вторая функция, которая скрывает div загрузки и показывает экран загрузки, который работает, но ничего после этого.

Ранее я работал с механизмом приложений на php-сайте, который требовал, чтобы мой app.yaml предоставил инструкции для каждого файла в моем приложении, но поскольку загружается только одна страница, мой файл app.yaml толькосодержит следующее:

runtime: python37

env_variables:
  CLOUD_STORAGE_BUCKET: mybucket.appspot.com

Кроме того, мой файл require.txt заполняется следующим образом:

Flask == 1.1.1
Flask-SQLAlchemy == 2.4.0
matplotlib == 3.1.1
NumPy == 1.17.2
SciPy == 1.3.1

google-cloud-storage==1.13.2
gunicorn==19.9.0

Я подозреваю, что это как-то связано с app.yaml и iframes,но я не знаю, что бы я сделал, чтобы решить проблему (или если это вообще проблема).

Буду очень признателен за любую помощь!Заранее спасибо!

ОБНОВЛЕНИЕ: я добавил форму в index.html, в которой используются те же действия и метод, но в качестве теста они не перенаправляются на iframe.Когда я отправляю эту форму, я получаю сообщение «Внутренняя ошибка сервера - сервер обнаружил внутреннюю ошибку и не смог выполнить ваш запрос. Либо сервер перегружен, либо в приложении имеется ошибка». *

ОБНОВЛЕНИЕ 2: Когда я удаляю весь код из маршрута / upload и меняю его на «hello world», он действительно возвращает «hello world».

ОБНОВЛЕНИЕ 3: Когда я проверяю элемент iframe, я вижу, что в нем есть сообщение «Слишком большой запрос на объект, ваш клиент выдал слишком большой запрос».

1 Ответ

1 голос
/ 23 сентября 2019

Кажется, я неправильно истолковал проблему.GAE не позволит загружать файлы> 32 МБ.Вместо этого мне нужно будет использовать метод blobstore.Будущие люди могут увидеть подробности здесь:

https://cloud.google.com/appengine/docs/standard/python/blobstore/

...