Отправка данных, запрос таблицы на основе этих данных и рендеринг - PullRequest
0 голосов
/ 29 ноября 2018

Я занимаюсь разработкой инфраструктуры пространственных данных.Он основан на веб-приложении, созданном с помощью Django.В веб-приложении есть карта, на которой можно рисовать многоугольники.На основе нарисованного вами многоугольника конкретные данные должны быть возвращены клиенту.

Таким образом, поток выглядит следующим образом: вы ставите точки на карту, после третьей точки она становится многоугольником.Вы нажимаете кнопку, которая запускает функцию putData js и отправляет данные в соответствующее представление с помощью запроса GET, и представление помещает данные в таблицу данных postgres.Все нормально до этого момента.

В обратном вызове функции putData я указываю еще один запрос на получение, без данных.Представление, которое обрабатывает этот запрос, получает последнюю строку из указанной выше таблицы postgres, делает запросы к другой базе данных со значениями из последней строки и отображает результат запроса с помощью html-страницы.Проблема в том, что визуализация никогда не происходит.Страница, на которой я нажал кнопку, остается неизменной, и перенаправление не происходит.

TL; DR: я хочу поместить данные в таблицу postgres с помощью запроса get, получить значения из этой таблицы с помощью запросавторой таблицы и рендеринга второй HTML-страницы со значениями, которые я получаю из второго источника данных.

main.js

function putData() {
    //Biggest and lowest values from the arrays.
    console.log('YAYYYYYYYYYYYYYYYYYYYYYYYYYYYYY');
    var maxX = Math.max(...boundingBox.X);
    var minX = Math.min(...boundingBox.X);
    var maxY = Math.max(...boundingBox.Y);
    var minY = Math.min(...boundingBox.Y);
    //AJAX request to getdata view with the four coorinates.
    $.ajax({
        url: "getdata/",
        type: "get",
        data: {'max_x': maxX, 'min_x': minX, 'max_y': maxY, 'min_y': minY},
        success: function () {
            console.log("Success!");
            $.ajax({
                url: "dowload",
                type: "get",
                success: function () {
                    console.log("Success!");
                }
            })
        }
    })
}

get_data.py

def get_data(request):
    maxX = request.GET['max_x']
    minX = request.GET['min_x']
    maxY = request.GET['max_y']
    minY = request.GET['min_y']
    extents = {
        'max_x': maxX,
        'min_x': minX,
        'max_y': maxY,
        'min_y': minY,
    }

    query = Query(max_x=maxX, min_x=minX, max_y=maxY, min_y=minY, username=username)
    query.save()
    return HttpResponse(extents)

printdata.py

def download(request):
    last_query = Query.objects.last()
    extents = {
        'max_x': last_query.max_x,
        'min_x': last_query.min_x,
        'max_y': last_query.max_y,
        'min_y': last_query.min_y,
    }
    """
    The **query** to the second datatable happens here.
    """
    return render(
        request,
        'output.html',
        context=query_result,
    )

Подскажите, пожалуйста, в чем могут быть причины этого?Я что-то упустил?

Я уверен, что функция обратного вызова - не лучший обходной путь для этой проблемы, поэтому я открыт для лучших решений.

1 Ответ

0 голосов
/ 29 ноября 2018

Насколько я понимаю, вы пытаетесь визуализировать шаблон django из вызова ajax для второй части вашего вопроса.Я думаю, что это ненужно.Попробуйте так:

  url: "getdata/",
        type: "get",
        data: {'max_x': maxX, 'min_x': minX, 'max_y': maxY, 'min_y': minY},
        success: function () {
            console.log("Success!");
            window.location = '/download'  // will forcefully change the url of the browser to load the page.
        }
    })
}

Также ответом первого представления должен быть JsonResponse:

from django.http import JsonResponse


def get_data(request):
    maxX = request.GET['max_x']
    minX = request.GET['min_x']
    maxY = request.GET['max_y']
    minY = request.GET['min_y']
    extents = {
        'max_x': maxX,
        'min_x': minX,
        'max_y': maxY,
        'min_y': minY,
    }

    query = Query(max_x=maxX, min_x=minX, max_y=maxY, min_y=minY, username=username)
    query.save()
    return JsonResponse(extents)  # this is if you want to use these json data in Javascript
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...