Django+ajax=dajax. Простая в использовании ajax библиотека django. Введение

28 Сен
2011

dajaxproject Сегодня хочу рассказать о замечательной и малоизвестной ajax библиотеке django. Думаю, что каждый django-разработчик, потратил не мало времени на то, чтобы разобраться с ajax в django. Лично мне не понравились все мануалы, которые я прочитал да и способы были не очень удобными, поэтому я продолжил свои поиски и в один прекрасный момент я наткнулся на www.dajaxproject.com. Оказалось, что библиотека dajax позволяет использовать ajax, столь же просто, сколько и писать на django.

Внутренности dajaxproject

Сама библиотека состоит из двух частей dajaxice и dajax.
Dajaxice
Dajaxice, является чем-то вроде мостика, ее основной целью, является взаимодействие кода, находящегося на стороне сервера с вашим javascript-кодом. Вот так это отображено на сайте разработчика: dajaxice Как видно на данной схеме, 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.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх