2009-07-10 10 views
6

Also ich weiß, dass ich zwischen diesen beiden mit JSON kommunizieren kann, aber ich weiß auch, dass ich alle Django-Objekte in JS manuell neu erstellen müsste.Wie benutzt man Django mit GWT?

Kennen Sie irgendwelche Werkzeuge oder Bibliotheken, die mir dabei helfen könnten? Oder vielleicht sogar ein besserer Weg, um dasselbe Ziel zu erreichen?

Ich fand nur diese beiden: http://palantar.blogspot.com/2006/06/agad-tutorial-ish-sort-of-post.htmlDjango + GWT or Jquery

Aber dann würde ich noch meine Objekte spiegeln müssen, manuell die DRY verletzen würde.

+0

Wie Vinay sagt, müssen Sie nicht alle Ihre Django-Objekte in GWT neu erstellen. Verwenden Sie GWT als Frontend und Django als Backend. Vor ein paar Monaten habe ich ein Django/GWT-Projekt durchgeführt, bei dem genau das oben Gesagte gemacht wurde, und habe schnell bemerkt, dass es keine aktuellen Tutorials zu diesem Thema gibt. Aus diesem Grund habe ich versucht, die meisten relevanten Themen der Verknüpfung von GWT und Django in meinem Blog zu behandeln, einschließlich der Kommunikation über JSON. http://andersguide.wordpress.com/2013/05/01/using-json-for-communication-between-gwt-and-django/ – user2340471

Antwort

2

Wenn Sie ein neues Modell sowohl in GWT als auch in Django erstellen möchten, besteht der einfachste Weg zum Generieren von Code darin, mit einer sehr einfachen Modelldefinition zu beginnen, z.

classname 
attribute1 type1 
attribute2 type2 

Parsen, dass mit ein wenig Python ist sehr einfach, und so generiert Code für Django und GWT, wenn Sie die oben wie Linien analysiert. Anpassung für Django und GWT wird nur ein wenig mehr Arbeit brauchen. Die Berücksichtigung von Fremdschlüsseln ist komplizierter. Vergessen Sie nicht ein kleines, generiertes Verfahren zum Serialisieren der Objekte, z. im JSON-Format.

Der erste Reflex, den ich hatte, war die Introspektion in Python, aber dann geriet ich in Schwierigkeiten, wenn ich fremde Schlüsselfelder in Django-Modellen untersuchte. Vielleicht sollte ich mir den Code des django-docs-Projekts ansehen (verfügbar unter google code).

Schließlich, um Ihre GWT + Django Entwicklung zu beschleunigen, können Sie ein HTTP-Proxy-Servlet im gehosteten Modus verwenden, so dass Sie Ihre GWT-Dateien nicht jedes Mal kompilieren müssen, wenn Sie Ihr GWT-Frontend mit einem Django Backend. Das Servlet auf http://www.servletsuite.com/servlets/httpproxy.htm wird wahrscheinlich den Trick machen.

3

Sie müssen nicht notwendigerweise alle Django-Objekte in JS manuell erstellen. Das GWT besteht nur aus den UI-Objekten und kommuniziert mit dem Django-Back-End, um die Modelldaten im Browser anzuzeigen und Updates zurück zu senden. Ich habe Django-Backends mit Adobe Flex- und GWT-Frontends verwendet, und in beiden Fällen musste ich keine Django-Objekte in JS neu erstellen. Ich habe jedoch benutzerdefinierte JSON-Encoder in meinem Back-End verwendet. Dies wurde getan, damit ich nur die Informationen senden konnte, die von der Benutzeroberfläche benötigt wurden, anstatt alles in einer Modellinstanz (von denen einige sensible Informationen sein können).

1

Es ist wirklich schwierig, sich manuell mit zwei skurrilen Frameworks wie GWT und Django zu wiederholen, etwas, das mich schließlich so frustriert hat, dass ich es aufgegeben habe (ich schrieb den ersten Artikel, den du erwähnt hast).

Irgendwann habe ich dann zu GWT/Java gewechselt, wo Java die Google App Engine war. Es gibt natürlich Kompromisse. Das Java scheint mir schwieriger einzurichten, aber einfacher, wenn es einmal ist. Am Ende erwies sich das DRY-Diktum als zu lauter Sirenenruf für mich. Mit GWT/GAE gehen Ihre Objekte gerade durch und Sie müssen Ihr Gehirn nicht zwingen, zwischen den Sprachen zu wechseln. Jetzt erfahren Sie mehr über LiveCycle und Flex. ;)

Hoffentlich machte das Sinn und war hilfreich - es war eine lange Woche! :)

P. S., hier ist der neue Standort für die GWT/Django Tutorial-ish Post

6

In meinem Django/GWT Projekt, das ich django-Kolben verwenden Django Modelle über REST-API im JSON-Format zu belichten. Sehen Sie auf der Website des Kolbens nach, wie Sie das erreichen können http://bitbucket.org/jespern/django-piston/wiki/Home.

Dann müssen Sie auf GWT-Seite nur Overlay-Typen für Ihre Django-Modelle erstellen (DevGuideCodingBasicsOverlay).

I GWT-Versand (http://code.google.com/p/gwt-dispatch/) mit etwas REST Güte verwenden hinzugefügt meine Modelle von Django Backend zu holen, aber Sie können Sie verwenden, was Sie wollen (HttpRequestBuilder), dann GWT verwenden JSONParser und durch JavaScriptObject und Gießen erhalten Sie wird Ihr gewünschtes Modell in GWT bekommen. Es mag ein wenig zu kompliziert erscheinen, aber es ist nicht das Gegenteil, es ist sehr angenehm zu bedienen.

0

Ich stimme Vinay Sajip voll und ganz zu. Wenn Sie beabsichtigen, eine App mit django mit GWT zu erstellen, bedeutet dies, dass django das Backend wäre und GWT ein Frontend wäre und über JSON kommunizieren würde.

Wenn Sie also überlegen, Ihr Backend-Django-Modell direkt an das GWT-Programm zu senden, ist entweder Ihr Programm zu einfach oder Sie entwerfen mit einer fehlenden Schicht die Datenübertragungsobjekte (DTO). Wenn die GWT-Frontend-Information vorhanden ist, benötigt sie nicht alle Attribute des Backend-Modells, sondern sollte nur das übertragen, was sie benötigt.

Ein einfaches Beispiel ist, wenn Sie eine E-Mail-App erstellen, möchten Sie sicherlich nicht alle E-Mail-Body-Inhalt übertragen, wenn Sie die E-Mail-Titelauflistung laden. (Feuerbrand auslösen und Gmail ausspionieren, Sie werden begeistert sein)

Ich hatte mit dem gleichen Problem einige Zeit zu kämpfen, vor allem, wenn Sie die RPC-Linie des Denkens folgen.