Опрос задачи Celery с помощью Ajax

У меня есть задача Celery, которая заполняет базу данных PostgreSQL в течение нескольких минут. Я хочу получать текущие данные из базы в представлении Django и отправлять их в шаблон, где они будут постоянно отображаться в зависимости от хода выполнения задачи. Таким образом, я хочу обновлять шаблон в режиме реального времени.

В настоящее время у меня есть представление, которое вызывает задачу Celery и получает результат задачи. Затем оно рендерит шаблон и отправляет ему результат задачи в виде строки, а также id задачи.

Я не очень хорошо знаком с AJAX, но из того, что я прочитал, мне понадобится другое представление, которое будет вызывать AJAX для получения самого последнего результата задачи.

Вот код на данный момент:

Вид, который отображает шаблон:

def dashboard(request):
    result = prepare_database.delay()
    result_str = result.get()
    return render(request, 'appname/template.html',
                      {'task_id': result.task_id(), 'str': result_str})
   

Вид, который получает текущие данные

def current_data(request):
    task_id = request.GET.get('task_id')
    if task_id:
        async_result = AsyncResult(task_id)
        return JsonResponse({'data': async_result.get()})

Ajax для опроса задания (опять же, я очень новичок в AJAX):

$.ajax({
    url: '/current_data/',
    method: 'GET',
    data: {
        data: 'data'
    },
    success: function(response) {
        // Update the HTML with the results
    }
});

Пожалуйста, дайте мне знать, если весь мой подход ошибочен, так как я не слишком уверен, что это правильный путь. Также дайте мне знать, если есть что-то еще, что я должен прояснить или уточнить.

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