Я создаю веб-приложение на 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, я вижу, что в нем есть сообщение «Слишком большой запрос на объект, ваш клиент выдал слишком большой запрос».