Хотя это не совсем в духе ТАК, мне нравится этот вопрос, потому что у меня были те же проблемы, когда я начинал, поэтому я дам вам краткое руководство. Очевидно, вы не понимаете принципы, стоящие за ними (не воспринимайте это как оскорбление, но если бы вы это сделали, вы бы не спрашивали).
Джанго на стороне сервера . Это означает, что, скажем, клиент идет по URL, у вас есть функция, views
которая отображает то, что он видит, и возвращает ответ в HTML. Давайте разберем это на примеры:
views.py:
def hello(request):
return HttpResponse('Hello World!')
def home(request):
return render_to_response('index.html', {'variable': 'world'})
index.html:
<h1>Hello {{ variable }}, welcome to my awesome site</h1>
urls.py:
url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),
Это пример простейшего использования. Переход к значению 127.0.0.1:8000/hello
означает запрос к hello()
функции, переход к функции 127.0.0.1:8000/home
вернет index.html
и заменит все переменные в соответствии с запросом (вы, вероятно, уже знаете все это).
Теперь поговорим об AJAX . AJAX-вызовы - это код на стороне клиента, выполняющий асинхронные запросы. Это звучит сложно, но это просто означает, что он делает запрос для вас в фоновом режиме, а затем обрабатывает ответ. Поэтому, когда вы делаете AJAX-вызов для какого-то URL, вы получаете те же данные, которые вы получаете, когда пользователь идет в это место.
Например, вызов AJAX 127.0.0.1:8000/hello
вернет то же самое, что и при посещении. Только на этот раз у вас есть это внутри функции JavaScript, и вы можете работать с ней так, как захотите. Давайте посмотрим на простой вариант использования:
$.ajax({
url: '127.0.0.1:8000/hello',
type: 'get', // This is the default though, you don't actually need to always mention it
success: function(data) {
alert(data);
},
failure: function(data) {
alert('Got an error dude');
}
});
Общий процесс таков:
- Вызов переходит на URL,
127.0.0.1:8000/hello
как будто вы открыли новую вкладку и сделали это самостоятельно.
- Если это успешно (код состояния 200), выполните функцию для успеха, которая предупредит полученные данные.
- Если не получается, сделайте другую функцию.
Что теперь будет здесь? Вы получите предупреждение с «Привет мир» в нем. Что произойдет, если вы сделаете AJAX звонок домой? То же самое, вы получите предупреждение с указанием <h1>Hello world, welcome to my awesome site</h1>
.
Другими словами - в вызовах AJAX нет ничего нового. Это просто способ дать вам возможность получать данные и информацию, не покидая страницы, и это обеспечивает плавный и очень аккуратный дизайн вашего сайта. Несколько рекомендаций, которые вы должны принять к сведению:
- Узнайте JQuery . Я не могу подчеркнуть это достаточно. Вам нужно немного это понять, чтобы понять, как обрабатывать полученные данные. Вам также нужно понять некоторый базовый синтаксис JavaScript (недалеко от Python, вы привыкнете к нему). Я настоятельно рекомендую видеоуроки Envato для jQuery , они великолепны и помогут вам выбрать правильный путь.
- Когда использовать JSON? , Вы увидите много примеров, когда данные, отправляемые представлениями Django, находятся в формате JSON. Я не стал вдаваться в подробности, потому что не важно, как это сделать (имеется множество объяснений), и гораздо важнее, когда . И ответ на этот вопрос - данные JSON являются сериализованными данными. То есть данными, которыми вы можете манипулировать. Как я уже говорил, AJAX-вызов будет получать ответ, как если бы пользователь сделал это сам. Теперь скажите, что вы не хотите связываться со всеми html-файлами, а вместо этого хотите отправлять данные (возможно, список объектов). JSON хорош для этого, потому что он отправляет его как объект (данные JSON выглядят как словарь python), а затем вы можете перебирать его или делать что-то еще, что устраняет необходимость просеивать бесполезный html.
- Добавьте это в последнюю очередь . Когда вы создаете веб-приложение и хотите реализовать AJAX - сделайте себе одолжение. Во-первых, создайте приложение полностью без AJAX. Смотри что все работает. Тогда и только тогда начните писать вызовы AJAX. Это хороший процесс, который также помогает вам многому научиться.
- Используйте инструменты разработчика Chrome . Поскольку вызовы AJAX выполняются в фоновом режиме, иногда их очень трудно отладить. Вы должны использовать инструменты разработчика Chrome (или аналогичные инструменты, такие как firebug) и другие
console.log
вещи для отладки. Я не буду подробно объяснять, просто погуглите и узнайте об этом. Это было бы очень полезно для вас.
- CSRF осведомленность . Наконец, помните, что для отправки запросов в Django требуется
csrf_token
. С вызовами AJAX, часто вы хотели бы отправлять данные без обновления страницы. Вы , вероятно, столкнутся некоторые проблемы , прежде чем, наконец , помните , что - ждать, вы забыли отправить csrf_token
. Это известное препятствие для начинающих в интеграции AJAX-Django, но после того, как вы узнаете, как заставить его играть хорошо, это просто как пирог.
Это все, что приходит мне в голову. Это обширная тема, но да, вероятно, там не достаточно примеров. Просто прокладывайте себе путь, медленно, в конце концов, вы получите это.
csrf_token
, можем ли мы обойти этот метод? Если бы у нас был пример функции,ajaxCall()
мы могли бы просто использовать традиционный метод чего-то вроде<form onsubmit='ajaxCall();return false;'>
, верно?В дополнение к отличному ответу yuvi, я хотел бы добавить небольшой конкретный пример того, как с этим справляться в Django (помимо любых js, которые будут использоваться). В примере используется
AjaxableResponseMixin
и предполагается модель Author.Источник: документация Django, Обработка форм с представлениями на основе классов.
Ссылка на версию 1.6 Django больше не доступна, обновлена до версии 1.11
источник
Я пишу это, потому что принятый ответ довольно старый, он нуждается в обновлении.
Вот так я бы интегрировал Ajax с Django в 2019 году :) И давайте возьмем реальный пример того, когда нам понадобится Ajax: -
Допустим, у меня есть модель с зарегистрированными именами пользователей, и с помощью Ajax я хочу узнать, существует ли данное имя пользователя.
HTML:
Ajax:
urls.py:
views.py:
Также render_to_response, который устарел и был заменен render и начиная с Django 1.7 и далее вместо HttpResponse, мы используем JsonResponse для ответа ajax. Поскольку он поставляется с кодировщиком JSON, вам не нужно сериализовать данные перед возвратом объекта ответа, но
HttpResponse
это не рекомендуется.источник
Просто и приятно. Вам не нужно менять свои взгляды. Bjax обрабатывает все ваши ссылки. Проверьте это: Bjax
Использование:
Наконец, включите это в заголовок вашего HTML:
Для получения дополнительных настроек, ознакомьтесь с демо здесь: Bjax Demo
источник
AJAX - лучший способ выполнять асинхронные задачи. Выполнение асинхронных вызовов является обычным делом при создании любого веб-сайта. Мы рассмотрим короткий пример, чтобы узнать, как мы можем реализовать AJAX в Django. Нам нужно использовать jQuery, чтобы писать меньше javascript.
Это контактный пример, который является самым простым примером, который я использую для объяснения основ AJAX и его реализации в Django. Мы будем делать запрос POST в этом примере. Я следую одному из примеров этого поста: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
models.py
Давайте сначала создадим модель контакта, имеющую основные детали.
forms.py
Создайте форму для вышеуказанной модели.
views.py
Представления выглядят аналогично основному представлению создания на основе функций, но вместо возврата с визуализацией мы используем ответ JsonResponse.
urls.py
Давайте создадим маршрут вышеупомянутого представления.
шаблон
Переходя к разделу внешнего интерфейса, визуализируйте форму, которая была создана над тегом формы, вместе с csrf_token и кнопкой отправки. Обратите внимание, что мы включили библиотеку jquery.
Javascript
Давайте теперь поговорим о части JavaScript, при отправке формы мы делаем ajax-запрос типа POST, принимаем данные формы и отправляем на сервер.
Это просто базовый пример, чтобы начать работу с AJAX с django. Если вы хотите получить погружение с помощью еще нескольких примеров, вы можете просмотреть эту статью: https://djangopy.org/learn/step-up-guide-to- реализовать-АЯКС-в-Джанго
источник
Я пытался использовать AjaxableResponseMixin в моем проекте, но в результате получилось следующее сообщение об ошибке:
Это связано с тем, что CreateView будет возвращать ответ перенаправления вместо возврата HttpResponse при отправке запроса JSON в браузер. Поэтому я внес некоторые изменения в
AjaxableResponseMixin
. Если запрос является ajax-запросом, он не будет вызыватьsuper.form_valid
метод, просто вызовите егоform.save()
напрямую.источник
Когда мы используем Django:
Если вы хотите сохранить старые данные, вы можете сделать это без Ajax. (Страница будет обновлена)
Или вы можете сделать с Ajax (страница не будет обновлена)
Если вы используете Ajax, вы должны сделать это:
Джанго отличается от Аякса. Причина этого заключается в следующем:
На мой взгляд, если вы хотите использовать ajax везде. когда вам нужно сначала инициализировать страницу с данными, вы можете использовать Django с Ajax. Но в некоторых случаях вам просто нужна статическая страница без чего-либо с сервера, вам не нужно использовать шаблон Django.
Если вы не думаете, Ajax - лучшая практика. Вы можете использовать шаблон Django, чтобы делать все, как аниме.
(Мой английский не очень хорош)
источник