Архитектура Ajax в приложении Django
Я пытаюсь найти оптимальную архитектуру для приложения ajax-тяжелого Django, которое я сейчас создаю. Я хотел бы придерживаться последовательного способа делать формы, проверять, получать данные, формат сообщений JSON, но найти чрезвычайно сложно найти решение, которое можно использовать последовательно.
Может ли кто-нибудь указать мне в правильном направлении или поделиться своим взглядом на лучшую практику?
Ответы
Ответ 1
Я делаю все как обычные представления, которые обычно отображаются в браузере. Это включает в себя все ответы на запросы AJAX (подстраницы).
Когда я хочу сделать биты сайта более динамичными, я затем использую jQuery для создания AJAX или в этом случае AJAH и просто загружаю содержимое одного из div на дополнительной странице на страницу запроса.
Эта методика работает очень хорошо - очень легко отлаживать вспомогательные страницы, поскольку они являются просто нормальными страницами, а jQuery упрощает вашу жизнь, используя их как часть страницы AJA [XH].
Ответ 2
Для всех ответов на это я не могу поверить, что никто не упоминал django-piston. Он в основном продвигался для использования в создании API REST, но он может выводить JSON (который может использовать jQuery, среди прочих), и работает так же, как и представления, что вы можете делать что-либо с запросом, что делает его отличным вариантом для реализации взаимодействий AJAX ( или AJAJ [JSON], AJAH и т.д. что угодно). Он также поддерживает проверку формы.
Ответ 3
Я не могу придумать какой-либо стандартный способ вставки ajax в приложение Django, но вы можете взглянуть на этот учебник.
Вы также найдете более подробную информацию о странице django об Ajax
Ответ 4
Две недели назад я сделал напишу, как я реализую подшаблоны, чтобы использовать их в запросе "normal" и "ajax" (для Django это одно и то же). Возможно, это полезно для вас.
Ответ 5
+1 к Нику для страниц, отображаемых обычно в браузере. Кажется, это лучшая отправная точка.
Проблема с простейшими подходами AJAX, такими как Nick и vikingosegundo, заключается в том, что вам придется полагаться на свойство innerHTML
в вашем Javascript. Это единственный способ сбросить новый HTML-код, отправленный в JSON. Некоторые считают это плохим веществом.
К сожалению, я не знаю стандартного способа репликации отображения форм с использованием Javascript, который соответствует рендерингу Django. Мой подход (который я все еще продолжаю работать) заключается в подклассе класса Django Form
, поэтому он выводит бит Javascript вместе с HTML из as_p()
и т.д. Затем они реплицируют форму, которую я манипулирую DOM.
Ответ 6
Из опыта я знаю, что управление приложением, в котором вы создаете HTML на стороне сервера и просто "вставляете" его на свои страницы, становится кошмаром. Это также невозможно проверить с помощью тестовой среды Django. Если вы используете Selenium или аналогичный инструмент, все в порядке, но вам нужно дождаться, когда запрос ajax вернется, поэтому вам нужно много снов в вашем тесте script, что может замедлить ваш тестовый пакет.
Если целью использования метода Ajax является создание хорошего пользовательского интерфейса, я бы порекомендовал все, как интерфейс GMail, и делать все в браузере с помощью JavaScript. Я написал несколько таких приложений, используя только jQuery, государственные машины для управления состоянием пользовательского интерфейса и JSON с помощью ReST на сервере. Django, IMHO, идеально подходит для бэкэнд в этом случае. Есть даже стороннее программное обеспечение для создания интерфейса ReST для ваших моделей, которые я никогда не использовал сам, но насколько я знаю, они отлично разбираются в простых вещах, но вам, конечно, все равно нужно делать свою собственную бизнес-логику.
При таком подходе вы столкнулись с проблемой дублирования кода в JS и в вашем бэкэнд, таких как обработка формы, проверка и т.д. Я думал об этом решении, создавая структурированную информацию о формах и логике проверки который я могу использовать в JS. Это можно скомпилировать во время развертывания и загрузить как любой другой JS файл.
Кроме того, избегайте использования XML. Браузеры медленно анализируют его, это боль для генерации и боль для работы в браузере. Используйте JSON.
Ответ 7
Im в настоящее время тестирует:
Напиши позже мои выводы в моем блоге http://blog.sserrano.com