Во вступительной HTML-версии веб-приложения для научного исследования данные собираются с помощью форм.
Я добавил функцию JavaScript, которая отправляет данные через API-интерфейс выборки:
Код: Выделить всё
fetch('/prepare/', {
"method": "POST",
"redirect": 'follow',
"headers": {
"Content-Type": "application/json",
charset: "utf-8"
},
"body": data_to_send,
}).then(
response => {
if (response.redirected) {
window.location = response.url;
} else {
window.location = response.url;
}
}
)
)
Это должно отправить запрос на конечную точку /prepare, для чего я реализовал функцию flask, которая сохраняет данные в базе данных. Функция возвращает перенаправление(url_for(...)) на конечную точку /study/, где начинается фактическая исследовательская задача.
Код: Выделить всё
@app.route('/prepare/', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
# Save JSON to file with task_id as the folder and uuid as the filename
#...
session_id = request.json['session_id']
pid = request.json['pid']
#redirect
return redirect(url_for('study', pid=pid, SESSION_ID=session_id), code=307)
функция для конечной точки /study/ использует render_template для отображения исследовательской задачи.
Код: Выделить всё
@app.route('/study/', methods=['GET', 'POST'])
def study():
print("routed to study")
pid = request.args.get('PID')
session_id = request.args.get('SESSION_ID')
return render_template("interface.html", pid=pid ...)
Перенаправление на html-страницу, отображаемую с помощью /study/, не работает, браузер остается на первой странице, но URL-адрес изменился со всеми парами «ключ-значение» пользовательских данных в качестве параметров. Интересно, что перенаправление работает корректно при отладке и установке двух точек останова при выборке, а затем в функции js. Кроме того, терминал с сервером flask показал, что он действительно правильно перенаправился на конечную точку /study/. Я предполагаю, что существует конфликт между http-запросом и js fetch api, поэтому я установил type="reset" для кнопки html, и теперь это работает. Раньше тип атрибута вообще не устанавливался. Форма кнопки — это пользовательская кнопка, разработанная кем-то другим для исследования (это исследование-воспроизведение). Верен ли мой анализ ошибок? Является ли решение адекватным подходом или мне следует выбрать другой путь?
Подробнее здесь:
https://stackoverflow.com/questions/797 ... s-expected