Делать запросы из Javascript на сервер Django - PullRequest
5 голосов
/ 20 апреля 2011

Я пытаюсь добавить некоторые основные динамические функции на веб-страницу.Как мне использовать JavaScript на стороне клиента для доступа к информации базы данных через django на стороне сервера?

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

Далее, я хочу иметь возможность выполнять несколько запросов к базе данных через JavaScript на одной странице.Примером может служить веб-страница для создания счета.Каждая дополнительная строка счета-фактуры потребует нового запроса к базе данных.Затем, в зависимости от продукта, добавленного в счет-фактуру, потребуется дополнительный запрос, чтобы определить цену этого продукта.Я получаю несколько запросов к базе данных на одной странице, которые выполняются динамически.

По сути, я хочу, чтобы django выполнял поиск в базе данных и передавал информацию в JavaScript.

Ответы [ 4 ]

6 голосов
/ 20 апреля 2011

Javascript, будучи клиентской стороной, не может напрямую получить доступ к вашей БД.Единственное, что он может сделать, это сделать запрос к Джанго.Если вы хотите выполнить этот запрос без перезагрузки страницы, вам нужно использовать ajax-вызов.

Сначала подготовьте свои взгляды как обычно без JavaScript.Взгляните на jquery и сделайте ajax-вызов, фактически запрашивая то же представление.См. http://api.jquery.com/jQuery.get/ и http://api.jquery.com/jQuery.post/

После успешного выполнения запроса заполните контейнер, используя обратный вызов успешного вызова get / post.

Вот простойПример приложения Django с вызовами jQuery AJAX: http://dl.dropbox.com/u/83342/ajaxapp.tar.gz

3 голосов
/ 20 апреля 2011

Чтобы поместить некоторые "стандартные" термины в то, что вы спрашиваете, похоже, вы ищете функциональность AJAX от Django.

Во-первых, плохие новости: в Django нет функций, специфичных для такого рода функций.

Хорошие новости: Представление Django, о котором вы говорите, будет принимать HTTP-запросы, как и любой другой. Что вам нужно сделать, так это написать некоторый код JavaScript, который генерирует свой собственный HTTP-запрос и использует вывод представления так же, как браузер.

Лучшие новости: Существуют библиотеки JavaScript, такие как JQuery, которые упрощают написание надежных асинхронных запросов на стороне клиента (что вы хотите) на lot . На самом деле, я бы настоятельно рекомендовал использовать такую ​​библиотеку, как JQuery, вместо того, чтобы пытаться написать свой собственный код для обработки запросов. Надежно работать с одним браузером / машиной - простая задача, но невероятно сложно и трудоемко заставить работать надежно во всех современных широко используемых браузерах.

Надеюсь, это поможет!

2 голосов
/ 17 июля 2014

Я очень опаздываю на вечеринку, но я считаю, это именно то, что вы ищете.

Соответствующий код AJAX:

var create_note = function() {
  var title = $("#title").val()
  var slug = $("#slug").val()
  if (title != "" && slug != "") { // Fields must actually contain something
    var data = { title:title, slug:slug };
    var args = { type:"POST", url:"/create/", data:data };
    $.ajax(args);
  }
  else {
    // display an explanation of failure -- optional for starters
  }
  return false;
};

Замените url в args своим собственным URL.переменная data содержит вашу POST информацию.В этом примере это HTML input s с ID s title и slug.Django получит /create/ (ваш URL), проанализирует его через urls.py и перенаправит его на view, как всегда.

Тогда вы просто заставите свою кнопку отправки вызывать эту функцию вместонормального this.form.submit(); или записи type="submit", например:

<input type="button" value="Submit" onClick="create_note();">

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

Наконец, на ваш взгляд, вы можете сделать что-то вроде этого (не забудьте проложить маршрут через * 1028).*!):

def create_note(request):
    note = Notes() # Sample Notes class for the purposes of this example
    note.text = request.POST['slug']
    note.title = request.POST['title'] # Just like what you would do normally!
    note.save()
1 голос
/ 21 апреля 2011

Вы сказали это, AJAX !

Если вы захотите покопаться в этом, рассмотрите страницу MDN AJAX хорошего начального уровня для вводных чтений; а затем " Какая библиотека AJAX лучше всего подходит для Django? " в Stackoverflow для дальнейших исследований, более специфичных для вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...