2009-10-25 6 views
6

Ich versuche, meinen Kopf um Cappuccino zu bekommen. Ich möchte, dass meine StackOverview-Kollegen die Architektur unten überprüfen und sehen, ob sie sinnvoll ist - das Ziel ist die Nutzung der einzigartigen Vorteile von Django und Cappuccino, ohne dass sich die Technologien überlappen ...Cappuccino, Django, AJAX, und alles zusammenpassen - überprüfen Sie meine Architektur!

Wenn der Webbrowser anfragt eine 'freundliche' URL (zB /, /, etc):

  • Djangos urls.py entspricht dies einer Ansicht.
  • Die Aussicht, anstatt Djangos typische Arbeit in einer Vorlage Füllung zu tun mit den Einheimischen Dict, kehrt
    die kleinen ‚Stub‘ HTML in ein Cappuccino App direkt verwendet.
  • Der Client empfängt den Cappuccino HTML
  • der Client die Objective J JS URLs in dem Stub HTML erwähnt anfordert
  • Der Endbenutzer app ausgeführt wird, und im Browser angezeigt

Der Browser hat jetzt eine funktionierende App. Wenn der Benutzer etwas tut, das etwas vom Server anfordert:

  • Der Browser sendet an eine URL ein XMLHTTPRequest.
  • Djangos URLs.py entspricht einer Ansicht .
  • Die Ansicht funktioniert, möglicherweise in Wechselwirkung mit dem DB-Modell. Aber anstatt eine Vorlage zurückzugeben, gibt Django etwas JSON zurück.
  • Der Client erhält den JSON und tut was immer er tun muss.

Macht das Sinn? Wir haben immer noch den Vorteil von freundlichen URLs und die Datenbank wird erstellt, damit wir unseren Code modellieren können. Anstatt jedoch Vorlagen zu verwenden, stellen wir Cappuccino-Stub-Seiten und JSON-Antworten bereit, um den Nutzern mehr wie eine echte App und weniger wie eine HTML-Vorlagen-Engine zu geben.

Gibt es vielleicht einen besseren Weg, Dinge zu tun? Was benutzen andere Pythonisten? Vielen Dank für Ihr Feedback.

Antwort

4

Für eine Website mit wenig Verkehr wäre die Verwendung von Djangos Routing-Schicht in Ordnung, aber wenn Sie planen, eine erhebliche Menge an Datenverkehr zu erhalten, könnten Sie erwägen, dass Ihr Proxy-Webserver die Stubs behandelt.

Für den Rest funktioniert es und die TurboGears-Community macht es seit Jahren (ich war ein TG-Committer, also das ist, was ich normalerweise verwende). Die TG-Architektur der Rückgabe eines Wörterbuchs an eine Vorlage macht dies trivial, da Sie 'json' als Vorlage-Engine festgelegt haben.

Das Gleiche in Django ist nicht viel komplizierter. Verwenden Sie einfach die serialization Tools, um das Ergebnis in die Antwort zu schreiben, anstatt die Templating-Aufrufe zu verwenden.

Beachten Sie, dass es bei einer solchen Architektur wesentlich einfacher zu verwalten ist, wenn Sie die gesamte Anwendungslogik an einem Ort behalten. Wenn Sie eine App-Logik in Django und einige im Browser einfügen, werden die Dinge ziemlich schnell chaotisch.Wenn Sie Ihren Server als dumme Persistenzschicht behandeln (mit Ausnahme von Validierung/Authentifizierung/Autorisierung), ist das Leben einfacher.

FWIW, ich finde, dass Sproutcore einfacher zu handhaben ist als Cappuccino, wenn Sie an stärkeren, nicht progressiven Enhancement-Frameworks interessiert sind.

Verwandte Themen