2009-10-25 9 views
6

Sto cercando di capire come funziona Cappuccino. Mi piacerebbe che i miei colleghi di StackOverview rivedessero l'architettura qui sotto e vedessero se aveva senso - l'obiettivo è quello di sfruttare i vantaggi unici di Django e Cappuccino senza raddoppiare dove le tecnologie si sovrappongono ...Cappuccino, Django, AJAX e montare tutto insieme - rivedi la mia architettura!

Quando il browser web richiede un URL 'friendly' (ad esempio, /,/articoli, ecc):

  • urls.py di Django corrisponde a questo ad una vista .
  • La vista, piuttosto che fare il lavoro Djangos tipica di compilare un modello con la gente del posto dict,
    restituisce il piccolo HTML 'stub' utilizzato in un cappuccino app direttamente.
  • Il client riceve il Cappuccino HTML
  • Il client richiede l'obiettivo J JS URL citati nel HTML stub
  • L'applicazione per l'utente finale viene eseguita e visualizzata nel browser

Il browser ora ha un'app funzionante. Quando l'utente fa qualcosa che chiede qualcosa dal server:

  • il browser invia una XMLHTTPRequest a un URL.
  • Django's URLs.py corrisponde a una vista .
  • La vista funziona, forse interagendo con il modello DB. Ma invece di restituire un modello, Django restituisce alcuni JSON.
  • Il client riceve il JSON e fa tutto ciò che deve fare.

Ha senso? Abbiamo ancora il vantaggio di URL amichevoli e il database creato per noi per modellare il nostro codice. Tuttavia, anziché utilizzare i modelli, forniamo le pagine stub di Cappuccino e le risposte JSON, al fine di offrire agli utenti qualcosa di più simile a un'app reale e meno simile a un motore di template HTML.

C'è forse un modo migliore di fare le cose? Cosa usano gli altri Pythonistas? Grazie per il vostro feedback

risposta

4

Per un sito di basso traffico, utilizzando strati di routing di Django sarebbe bene, ma se si pensa di ottenere una notevole quantità di traffico, si potrebbe considerare di avere il vostro web server proxy di gestire gli stub.

Per il resto, funziona e la comunità TurboGears lo fa da anni (ero un committer TG quindi è quello che uso normalmente). L'architettura TG di restituire un dizionario a un modello rende questo banale dato che hai appena impostato 'json' come motore di template.

Fare la stessa cosa in Django non è molto più complicato. Basta usare gli strumenti serialization per scrivere il risultato nella risposta piuttosto che utilizzare le chiamate di template.

Si noti che quando si esegue un'architettura come questa, è notevolmente più facile da gestire se si mantiene tutta la logica dell'applicazione in un'unica posizione. Mettere alcune logiche di app in Django e alcune nel browser fa sì che le cose inizino a diventare disordinate abbastanza velocemente.Se si considera il server come un livello di persistenza stupido (ad eccezione della convalida/autenticazione/autorizzazione), la vita è più semplice.

FWIW, trovo che Sproutcore sia più facile da utilizzare rispetto a Cappuccino se si è interessati a strutture di miglioramento non progressive più pesanti.