2009-10-25 9 views
6

Próbuję objąć moją głowę Cappuccino. Chciałbym, żeby moi rówieśnicy StackOverview przejrzeli poniższą architekturę i sprawdzili, czy ma to sens - celem jest wykorzystanie unikalnych zalet Django i Cappuccino bez podwojenia miejsca, w którym technologie pokrywają się ...Cappuccino, Django, AJAX i dopasowywanie go do siebie - przejrzyj moją architekturę!

Gdy przeglądarka żąda a 'przyjazny' URL (na przykład, /,/artykułów, etc):

  • urls.py Django pasuje to do widzenia.
  • Widok, zamiast robić DJangos typową pracę wypełnienie szablonu z mieszkańcami dict,
    zwraca niewielką HTML „skrótowej” użyte w aplikacja Cappuccino bezpośrednio.
  • Klient otrzymuje Cappuccino HTML
  • Klient żąda Celem J JS adresy wymienione w HTML skrótowej
  • Aplikacja użytkownika końcowego jest wykonywane i wyświetlanych w przeglądarce

przeglądarce ma teraz działającą aplikację. Kiedy użytkownik robi coś, co żąda czegoś z serwera:

  • Przeglądarka wysyła zapytanie XMLHTTPRequest do adresu URL.
  • Adresy URL Django pasują do widoku .
  • Widok działa, być może wchodząc w interakcje z modelem DB. Ale zamiast zwracania szablonu, Django zwraca trochę JSON.
  • Klient otrzymuje JSON, a robi wszystko, co musi.

Czy to ma sens? Nadal korzystamy z przyjaznych adresów URL i tworzonej bazy danych, aby modelować nasz kod. Jednak zamiast używać szablonów, dostarczamy strony pośredniczące Cappuccino i odpowiedzi JSON, aby dać użytkownikom coś w rodzaju prawdziwej aplikacji, a mniej jak mechanizm szablonowy HTML.

Czy istnieje lepszy sposób robienia rzeczy? Do czego służą inne Pythonistas? Dziękuję za twój komentarz.

Odpowiedz

4

W przypadku witryny o małym natężeniu ruchu korzystanie z warstwy routingu Django byłoby w porządku, ale jeśli planujesz uzyskać znaczny ruch, możesz rozważyć obsługę proxy przez serwer proxy.

Jeśli chodzi o resztę, to działa, a społeczność TurboGears robi to od lat (byłem komisarzem TG, więc zwykle to używam). Architektura TG polegająca na zwracaniu słownika do szablonu czyni to trywialnym, ponieważ wystarczy ustawić "json" jako silnik szablonu.

Robienie tego samego w Django nie jest dużo bardziej skomplikowane. Wystarczy użyć narzędzi serialization, aby zapisać wynik w odpowiedzi, zamiast korzystać z wywołań szablonów.

Należy pamiętać, że w przypadku takiej architektury zarządzanie nią jest znacznie łatwiejsze, jeśli zachowa się całą logikę aplikacji w jednym miejscu. Umieszczenie pewnej logiki aplikacji w Django i niektórych w przeglądarce powoduje, że rzeczy zaczynają robić się bałagan dość szybko.Jeśli potraktujesz swój serwer jako głupią warstwę uporczywości (z wyjątkiem walidacji/autoryzacji/autoryzacji), życie stanie się łatwiejsze.

FWIW Uważam Sproutcore za łatwiejszy w pracy niż Cappuccino, jeśli interesują cię cięższe, nie-progresywne frameworki.