Django+ajax=dajax. Простая в использовании ajax библиотека django
Django+ajax=dajax. Простая в использовании ajax библиотека django. Введение
Сегодня хочу рассказать о замечательной и малоизвестной ajax библиотеке django. Думаю, что каждый django-разработчик, потратил не мало времени на то, чтобы разобраться с ajax в django. Лично мне не понравились все мануалы, которые я прочитал да и способы были не очень удобными, поэтому я продолжил свои поиски и в один прекрасный момент я наткнулся на www.dajaxproject.com. Оказалось, что библиотека dajax позволяет использовать ajax, столь же просто, сколько и писать на django.
Внутренности dajaxproject
Сама библиотека состоит из двух частей dajaxice и dajax.
Dajaxice
Dajaxice, является чем-то вроде мостика, ее основной целью, является взаимодействие кода, находящегося на стороне сервера с вашим javascript-кодом. Вот так это отображено на сайте разработчика:
Как видно на данной схеме, dajaxice используется и на стороне сервера и на стороне клиента, что я и описал выше.
Dajax
Dajax — это очень простая библиотека для разработки асинхронной логики в ваших web-приложениях, с почти полным отсутствием javascript.
Установка
Скачиваем Dajaxice и Dajax, не забудьте, что главное здесь Dajaxice, поэтому он обязателен.
Распаковываем и устанавливаем.
Использование dajaxice
settings.py
Добавляем в INSTALLED_APPS dajaxice:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'dajaxice', ... )
Проверяем, чтобы TEMPLATE_LOADERS выглядели следующим образом:
TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', 'django.template.loaders.eggs.Loader', )
Так же, TEMPLATE_CONTEXT_PROCESSORS:
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.static", "django.core.context_processors.request", "django.contrib.messages.context_processors.messages")
Далее необходимо добавить DAJAXICE_MEDIA_PREFIX:
DAJAXICE_MEDIA_PREFIX="dajaxice"
Регистрируем функции, чтобы их было возможно использовать из javascript:
DAJAX_FUNCTIONS=( 'examples.ajax.dajaxice_example',
- В данном случае examples — название нашего приложения;
- ajax — файл в котором хранятся наши функции(у нас ajax.py). При вызове функций, название файла указывать не надо;
- dajaxice_example — функция которую мы и будем вызывать.
urls.py
Добавляем импорт:
from dajaxice.core import dajaxice_autodiscover dajaxice_autodiscover()
Новая строчка в urlpatterns:
(r'^%s/' % settings.DAJAXICE_MEDIA_PREFIX, include('dajaxice.urls')),
Возможно потребуется добавить импорт для view:
from django.conf import settings
index.html
На нашу страничку необходимо добавить следующее:
{% load dajaxice_templatetags %} My base template ... {% dajaxice_js_import %} ...
На этом наша настройка завершена и мы можем приступать к написанию первого приложения, с использованием dajaxice.
Как мама мыла мерс
Итак для начала надо создать файл ajax.py в нашем приложении.
Содержимое файла:
#-*-coding:utf-8-*- from django.utils import simplejson from dajaxice.decorators import dajaxice_register @dajaxice_register def dajaxice_example(request): return simplejson.dumps({'message':u'Мама мыла мерс!'})
Если кому-то не нравятся декораторы, то их можно заменить на:
from django.utils import simplejson from dajaxice.core import dajaxice_functions def myexample(request): return simplejson.dumps({'message':'Мама мыла мерс!'}) dajaxice_functions.register(myexample)
На веб-странице:
<input type="button" name="rand" value="Get message from server!" id="rand" onclick="Dajaxice.examples.dajaxice_example(my_callback)">
Помните, я говорил, что при вызове функции указывать имя файла не надо? Вот здесь это хорошо видно.
В более ранних версиях функция my_callback должна была указываться, как строка, сейчас по соображениям безопасности это выглядит так.
И сам javascript:
function my_callback(data){ alert(data.message); }
Введение в технологию dajaxice, закончено. Если будет интересно, в дальнейшем я расскажу как писал календарь с использованием djaxice и непосредственно об использовании dajax.