Ожидание во 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.

Вернуться на верх