Загрузка HTML во время работы в Django (возможно, с помощью асинхронных функций) - PullRequest
0 голосов
/ 27 апреля 2018

У меня этот проект , над которым я работал некоторое время:

В файле views.py я собираю много информации из IMDB, каждый вызов занимает около 0,3 секунды. Между тем, моя страница простаивает. Я хочу, чтобы он загрузил страницу, а затем закончил разговор.

Например, я хочу, чтобы он загружал рекомендуемые фильмы после того, как уже показаны актеры и актрисы, которые играли в обоих. Или в индексе я хочу разрешить пользователю печатать, а затем показывать варианты, на которые можно нажать. Я пробовал Celery с Redis, но Django не может отображать асинхронные задачи. Как я мог это сделать?

1 Ответ

0 голосов
/ 27 апреля 2018

Как вы сказали, Джанго не может этого сделать. Мой совет: разделяй и властвуй:

  1. Сначала напишите представление, которое просто отображает некоторый HTML-код для загрузки JS-скрипта, который может загружать ваши данные асинхронно, используя ярлык рендеринга. Интерфейсный интерфейс, такой как Vue, может помочь вам скрыть части макета при загрузке данных.
  2. Затем напишите представления, которые просто возвращают данные, используя объект JsonResponse в Django, например: одно представление для загрузки рекомендаций, одно представление для загрузки списка участников.
  3. Используйте XH-запросы для вызова ваших представлений и получения информации, используя методы Promise, чтобы все отображалось синхронно.
  4. Бонус: если у вас уже есть Celery, вы можете определить задачу, которая собирает все необходимые вам данные на сервере, и создать представление, которое опрашивает состояние вашей задачи, а затем вызывать его, используя XHR каждые несколько миллисекунд. пока ваши данные (или их часть, которые действительно зависят от того, как вы определяете свою задачу) не будут готовы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...