Опрос задачи 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
}
});
Пожалуйста, дайте мне знать, если весь мой подход ошибочен, так как я не слишком уверен, что это правильный путь. Также дайте мне знать, если есть что-то еще, что я должен прояснить или уточнить.