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

25 сентября 2011 г.

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

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.

Теги:
рубрика Программирование
  • Похожие статьи
  • Предыдущие из рубрики