У меня очень простая форма:

<form action="{% url 'test' %}" method="post">
    {% csrf_token %}
    <div class="col-md-12">
        {{ form }}
        <div class="row">
            <input class="btn btn-primary" type="submit" value="Compute">
        </div>
    </div>
</form>

Когда я нажимаю эту кнопку, в зависимости от типа звонка, это может занять до 20 секунд (из-за вызываемых SQL-запросов).

Есть ли способ в чистом django / python (, пожалуйста, не используйте jQuery, поскольку я стараюсь сделать это как можно более простым ), чтобы что-то отображалось на странице после нажатия кнопки и до тех пор, пока сообщение не будет успешным?

Найдите ниже мою очень простую форму:

class TestForm(forms.Form):
    option1 = forms.BooleanField(label="By XYZ", required=False)
    option2 = forms.BooleanField(label="By ZYX", required=False)

    error_messages = {
        'no_option': "Please select at least one of the options."
    }

Обратите внимание, что я также использую messages.success(request, f"Successfully computed values"), что означает, что приложение каким-то образом знает о завершении вызова.

0
WilliamW 19 Дек 2019 в 12:30

1 ответ

Лучший ответ

Нет. Протокол HTTP не имеет состояния. Вы должны будете реализовать некоторый Javascript (AJAX) для опроса сервера, пока он не покажет, что операция (вероятно, выполняется асинхронно) завершена. Это действительно большая работа для улучшения пользовательского опыта.

Я бы пошел, чтобы позволить опрос пользователя. «Ваши результаты могут занять до 20 секунд для генерации. Нажмите здесь, чтобы увидеть их» и вернуться на ту же страницу, пока результаты действительно не будут готовы. Это действительно не требует Javascript.

Это предполагает, что вы генерируете сложный результат в асинхронную серверную операцию, поэтому пользователь сразу же перенаправляется на ожидающую результаты страницу, как только нажимает.

2
nigel222 19 Дек 2019 в 09:44