Приведу Вам сегодня несколько примеров о том, как осуществлять функциональность AJAX в django приложении, используя библиотека jQuery JavaScript. Скажу сразу, что эта статья относится к версии Django 1.1 или новее и направлена на новичков Django, подобно мне :).
В отличие от некоторых других сетевых приложений, Django, слава Богу не привязан к какой-либо библиотеке JavaScript, и Вы можете использовать любую на свое усмотрение. Однако, В этой статье я буду использовать jQuery ради простоты.
Базовый пример Django и ajax
Давайте начнем с очень простого кода в views.py вашего приложения
from django.http import HttpResponsedef xhr_test(request):
if request.is_ajax():
message = "Hello AJAX"
else:
message = "Hello"
return HttpResponse(message)# Ваш образец URL может быть простым, как
(r'^xhr_test$','your_project.your_app.views.xhr_test'),
jQuery и большинство других "серьезных" библиотек установит HTTP_X_REQUESTED_WITH заголовок "XMLHttpRequest" (XHR) для Вас, тогда Django is_ajax() метод вернет true. Теперь, когда вы можете определить способ запроса, использование ajax становится проще для написания представлений и форм.
JQuery часть
$(function() {
$.get("/sandbox/xhr_test", function(data) {
alert(data);
});
});
Посылка POST Данных
Вот еще один пример того как Вы можете отправить POST-данные в представление.
$.post("/sandbox/xhr_test", {
name: "Berg",
food: "Code"
},
function(data) {
alert(data);
}
);
Теперь вы можете получить доступ к посланным данным, в вашем представлении. Это хорошая практика, чтобы проверять, например, что метод запроса именно POST на самом деле, прежде чем пытаться получить доступ к данным.
from django.http import HttpResponsedef xhr_test(request):
if request.is_ajax():
if request.method == 'GET':
message = "This is an XHR GET request"
elif request.method == 'POST':
message = "This is an XHR POST request"
# Здесь мы можем обратиться к POST данным
print request.POST
else:
message = "No XHR"
return HttpResponse(message)
JSON и XML
При работе с AJAX, обычно хотят вернуть что-то более полезное, чем простой текст. Давайте изменим нашу выше функцию возврата Django объекта преобразовывая результат в формат JSON или XML.
from django.http import HttpResponse
from django.core import serializers
from your_app.models import ExampleModeldef xhr_test(request, format):
if request.is_ajax():
if format == 'xml':
mimetype = 'application/xml'
if format == 'json':
mimetype = 'application/javascript'
data = serializers.serialize(format, ExampleModel.objects.all())
return HttpResponse(data,mimetype)
# Если вы хотите предотвратить не XHR вызовы
else:
return HttpResponse(status=400)# urls.py
(r'^xhr_test/(?P<format>\w+)/$','your_project.your_app.views.xhr_test'),
Теперь вы можете сделать запрос например /xhr_test/xml для ответа XML или /xhr_test/json для ответа JSON, если запрос не AJAX, тогда вернется ошибка HTTP 400 - плохой заголовок запроса.
Python и JSON
Python имеет JSON модуль, но Django уже идет с simplejson. Более того, словари Python очень похожы на структуру данных JSON, что делает их взаимодействие еще проще. Запустите "Python manage.py shell" в корне проекта и попробуйте следующее:
>>> from django.utils import simplejson
>>> test_dict = {'a': 1, 'b': 2, 'john' : 'done', 'jane' : 'doe'}
>>> simplejson.dumps(test_dict)
'{"a": 1, "john": "done", "b": 2, "jane": "doe"}'
Эта статья охватывает только самое основное. Ниже еще очень много о том, как обрабатывать ответ в JQuery правильно и как сериализовать объекты в Django. Я могу порекомендовать вам взглянуть на следующие статьи для дополнительной информации:
Ну вот пожалуй и все :).
Комментарии
Еще нет комментариев.