Ожидание во views Django
Есть вьюшка которая выполняет внутри себя код от 5 до 20 минут. Вопрос состоит в том как сделать анимацию ожидания, так как если сайт вечно в прогрузке он почему-то падает в ошибку
я не могу гарантировать что все получится, но я это решал так: я использовал бутстраповскую анимацию загрузки и чатгпт написал мне js, запрщающий что либо делать на время загрузки:
event.preventDefault();
var buttons = document.querySelectorAll('button');
buttons.forEach(function(button) {
button.disabled = true;
});
var spinner = document.getElementById('loadingSpinner');
spinner.style.display = 'block';
var form = document.querySelector('form');
setTimeout(function() {
form.submit();
}, );
});
Первое что вам нужно это убрать задачу в фон. Используйте например celery воркеров для её выполнения . Это делается для всех задач длинною больше 15 секунд.
Когда поставите задачу воркерам получите какой-то идентификатор этой задачи.
Отправьте этот идентификатор в js.
Js дергает этот же апи методом get с этим идентификатором. Вы спрашиваете готовность задачи. Как только будет готова - выдаете ответ. Пока задача не готова - шлите что не готова, js дергает апи дальше в цикле.
Вот нашел пример, хоть и перегружен. Можно без докера и без редиса, но принцип такой. (И картинку у них "украл")
https://habr.com/ru/companies/otus/articles/503380/
Для быстродействия нужно запилить longpolling или websocket.