Архитектура Ajax в приложении Django - PullRequest
14 голосов
/ 02 декабря 2009

Я пытаюсь найти оптимальную архитектуру для тяжелого ajax-приложения Django, которое я сейчас создаю. Я хотел бы придерживаться единообразного способа выполнения форм, проверки, извлечения данных, формата сообщений JSON, но мне очень трудно найти решение, которое можно использовать последовательно.

Может ли кто-нибудь указать мне правильное направление или поделиться своим мнением о наилучшей практике?

Ответы [ 7 ]

4 голосов
/ 07 ноября 2010

Несмотря на все ответы на этот вопрос, я не могу поверить, что никто не упомянул django-pneon . Он в основном предназначен для использования при создании REST API, но он может выводить JSON (который, среди прочего, может использовать jQuery) и работает так же, как представления, в которых вы можете делать с запросом все, что делает его отличным вариантом для реализации взаимодействий AJAX ( или AJAJ [JSON], AJAH и т. д.) Он также поддерживает проверку формы .

4 голосов
/ 02 декабря 2009

Я делаю все как обычные представления, которые нормально отображаются в браузере. Сюда входят все ответы на запросы AJAX (подстраницы).

Когда я хочу сделать биты сайта более динамичными, я использую jQuery для выполнения AJAX или, в данном случае, AJAH и просто загружаю содержимое одного из элементов div на подстранице в запрашивающую страницу.

Этот метод работает очень хорошо - очень легко отлаживать подстраницы, поскольку они являются просто обычными страницами, и jQuery делает вашу жизнь очень легкой, используя их как часть AJA [XH] ed страницы.

2 голосов
/ 05 ноября 2010

Из своего опыта я знаю, что управление приложением, в котором вы генерируете HTML на стороне сервера и просто «вставляете» его в свои страницы, становится кошмаром. Также невозможно выполнить тестирование с использованием тестовой среды Django. Если вы используете Selenium или аналогичный инструмент, это нормально, но вам нужно подождать, пока запрос ajax вернется, поэтому вам понадобится множество снов в вашем тестовом скрипте, что может замедлить ваш набор тестов.

Если целью использования техники Ajax является создание хорошего пользовательского интерфейса, я бы рекомендовал пойти ва-банк, например интерфейс GMail, и делать все в браузере с помощью JavaScript. Я написал несколько таких приложений, используя только jQuery, конечные автоматы для управления состоянием пользовательского интерфейса и JSON с ReST на бэкэнде. Django, IMHO, идеально подходит для бэкэнда в этом случае. Есть даже стороннее программное обеспечение для генерации ReST-интерфейса для ваших моделей, которое я никогда не использовал сам, но насколько я знаю, они хороши в простых вещах, но вам, конечно, все равно нужно делать свою собственную бизнес-логику .

При таком подходе вы сталкиваетесь с проблемой дублирования кода в JS и в вашем бэкэнде, такой как обработка форм, проверка правильности и т. Д. Я думал о решении этой проблемы путем генерации структурированной информации о формах и логике проверки. который я могу использовать в JS. Это может быть скомпилировано во время развертывания и загружено как любой другой файл JS.

Кроме того, избегайте XML. Браузеры медлят при его разборе, генерировать боль и работать с ней в браузере. Используйте JSON.

2 голосов
/ 03 декабря 2009

+ 1 для Ника для страниц, нормально отображаемых в браузере. Это, кажется, лучшая отправная точка.

Проблема с простейшими подходами AJAX, такими как Nick и vikingosegundo, заключается в том, что вам придется полагаться на свойство innerHTML в вашем Javascript. Это единственный способ вывести новый HTML, отправленный в JSON. Некоторые считают это плохим.

К сожалению, я не знаю стандартного способа репликации отображения форм с использованием Javascript, который соответствует рендерингу Django. Мой подход (над которым я все еще работаю) заключается в создании подкласса класса Django Form, чтобы он выводил биты Javascript вместе с HTML из as_p() и т. Д. Затем они копируют форму, с которой я манипулировал DOM.

2 голосов
/ 02 декабря 2009

Две недели назад я сделал запись , как я реализую суб-шаблоны, чтобы использовать их в запросах "normal" и "ajax" (для Django это одно и то же). Может быть, это полезно для вас.

2 голосов
/ 02 декабря 2009

Я не могу придумать ни одного стандартного способа вставить ajax в приложение Django, но вы можете взглянуть на это руководство .

Вы также найдете более подробную информацию на странице django об Ajax

1 голос
/ 23 апреля 2011

Я сейчас тестирую:

  • jQuery & backbone.js на стороне клиента

  • Джанго-поршень (промежуточный слой)

Напишу позже мои выводы в моем блоге http://blog.sserrano.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...