Dojango - Dojo + Django, Как обернуть django.contrib.auth и django-registration для AJAX, использование одной страницы

Я новичок в Додзё и Джанго. Тем не менее, я пытаюсь написать одностраничное приложение и не понимаю, как использовать встроенные инструменты аутентификации Django, поскольку они разработаны на основе традиционной модели Django «страница за просмотр».

Я хотел бы, чтобы все формы, как специфичные для моего приложения, так и для аутентификации и регистрации django, отображались в файле <div dojoType="dijit.layout.contentPane" id="mainPane"></div>. Я научился отображать представления, отображаемые как @json_response Dojango; однако я не знаю, как «обернуть» существующие представления, чтобы они не ожидали загрузки страницы.

Существует ли какая-либо обычная стратегия для одностраничных приложений Django? Мне нравятся ORM Django и пользовательский интерфейс Dojo, но их сложно полностью интегрировать. Спасибо.

##############################################################
#         #                                        #         #
#  LOGOUT #                                        #  DISP   #
#         ##########################################         #
#  REGSTR #                                        #  DISP   #
#         #  MAINPANE                              #         #
#  DO_IT  #                                        #  DISP   #
#         #  Forms, views, etc.                    #         #
#  CNTRL  #  using dojo.xhrGET, xhrPUT             #  DISP   #
#         #                                        #         #
#  QUIT   #                                        #  DISP   #
#         #                                        #         #
#         ##########################################  DISP   #
#         #                                        #         #
#         # STATUS: MESSAGE                        #         #
#         #                                        #         #
##############################################################

Изменить: просто чтобы быть более явным, я хочу такой поток:

  1. Пользователь нажимает кнопку "DO_IT".
  2. Dojo xhrGET получает форму DO_IT и заменяет ею содержимое MAINPANE.
  3. Пользователь что-то делает с формой DO_IT, и dojo xhrPOSTs действие пользователя.
  4. Dojo заменяет содержимое MAINPANE ответом.
  5. Прибыль

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


person justinzane    schedule 29.10.2011    source источник


Ответы (1)


Вы примерно расписали. Представление django может просто вернуть фрагмент HTML, который вы хотите в div #MAINPANE, и вы вставляете его, устанавливая свойство .innerHTML узла MAINPANE.

Как только пользователь вошел в систему, вся аутентификация должна происходить автоматически, даже для вызовов Ajax, поэтому вам не нужно об этом беспокоиться. Но вы должны учитывать, что произойдет, если аутентификация не удалась — вы можете просто сбросить сообщение 403 Permission Denied в свой div #MAINPANE.

Есть несколько других тонкостей в дизайне веб-страниц такого типа - в основном становится невозможным добавлять страницы в закладки, если вы не предоставите где-то ссылку «постоянная ссылка», которая приведет вас на страницу с требуемым содержимым, загруженным в раздел MAINPANE. И нажатие перезагрузки в браузере вызывает удивление, когда он не перезагружает текущий вид страницы, а возвращается к «домашнему» виду.

Или вы можете просто сделать это по-старому с помощью тегов FRAME :)

person Spacedman    schedule 30.10.2011