Каналы Django или StreamingHttpResponse для моих нужд? - PullRequest
0 голосов
/ 04 июня 2019

В настоящее время я работаю над веб-приложением проекта, используя Django. Я заранее подготовил скрипты (Python), которые отлично работают, но я столкнулся с проблемой, пытаясь реализовать ее с помощью Django. Я использовал сеансы html-запросов, чтобы поддерживать соединение http во время повторных запросов. Должен ли я использовать Django Channels или StreamHttpResponse для того же эффекта или что-то совсем другое?

В основном, jQuery с AJAX для многократного вызова view.function до тех пор, пока не будет выполнено требование, но так как каждый раз при получении URL-адреса с помощью session.get создается новый сеанс, поэтому я возвращаю неверные данные при попытке навигации по странице. Поиск всего, что связано с django, даст мне результаты сессий django.

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

Стоит ли искать StreamHttpResponse, каналы Django или что-то еще целиком?

views.py

def search_for_product(request):
    current_user = request.user
    task_id = request.GET.get('task_id', None)
    current_task = GetWebsite(current_user, task_id)

    if current_task.configured_task.final_result:
        current_task.configured_task.search_again()
    elif current_task.configured_task.item_found:
        if current_task.configured_task.item_details_found:
                current_task.configured_task.finalize_result()
        else:
            current_task.configured_task.find_details()
    else:
        current_task.configured_task.find_item()

  data = {
    'status': current_task.configured_task.current_status
  }
  time.sleep(5)
  return JsonResponse(data)

Как правило, search_for_product (результат) будет вызываться постоянно, пока не будут сохранены окончательные результаты. Я возвращаю состояние (булево) для определения того, удалось ли ему найти элемент, получил ли он сведения об элементе и готов ли показать результаты, которые моя функция AJAX использует для повторения, пока final_result не станет True. Это работает нормально, за исключением того, что мне нужно держать httpconnection открытым, иначе сайт не покажет правильные результаты и не сможет выполнить второй вызов при поиске сведений об элементе.

function getStatus(statusLabel, rowID, taskID) {
    allTasks[rowID] = $.ajax({
        url: 'http://localhost:8000/page/search-for-product/',
        method: 'GET',
        data: {
            'task_id': taskID
        },
        dataType: 'json'
    }).done(function(data) {
        if (data.final) {
            console.log(data.status);
        } else {
            statusLabel.style.color = 'green';
            statusLabel.textContent = data.status;
            console.log(data.status);
            getStatus(statusLabel, rowID, taskID);
        }
    }).fail(function(data) {
        console.log(data.task_id);
        statusLabel.textContent = data.status;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...