2009-07-10 9 views
6

Donc je sais que je peux communiquer entre les deux en utilisant JSON, mais je sais aussi que je devrais recréer manuellement tous les objets Django dans JS.Comment utiliser Django avec GWT?

Connaissez-vous un outil ou une bibliothèque qui pourrait m'aider à le faire? Ou peut-être même une meilleure façon d'atteindre le même objectif?

Je ne trouve ces deux: http://palantar.blogspot.com/2006/06/agad-tutorial-ish-sort-of-post.htmlDjango + GWT or Jquery

Mais j'aurais encore à refléter manuellement mes objets qui violeraient SEC.

+0

Comme le dit Vinay, vous n'avez pas besoin de recréer tous vos objets Django dans GWT. Utilisez GWT comme frontal et Django comme back-end. Il y a quelques mois, je suis passé par le processus de création d'un projet Django/GWT en faisant exactement ce qui précède, et j'ai rapidement remarqué l'absence totale de tutoriels à jour sur le sujet. Pour cette raison, j'ai essayé de couvrir la plupart des sujets pertinents de liaison GWT et Django ensemble sur mon blog, y compris comment communiquer via JSON. http://andersguide.wordpress.com/2013/05/01/using-json-for-communication-between-gwt-and-django/ – user2340471

Répondre

2

Si vous voulez créer un nouveau modèle, à la fois dans GWT et dans Django, le moyen le plus simple de générer du code est de partir d'une définition de modèle très simple, par ex.

classname 
attribute1 type1 
attribute2 type2 

Parsing qu'avec un peu de Python est très facile, et est donc la génération de code pour les deux Django et GWT une fois que vous analysé les lignes ci-dessus comme. La personnalisation pour Django et GWT ne prendra qu'un peu plus de travail. Prendre en compte les clés étrangères est plus compliqué. N'oubliez pas une toute petite méthode générée pour sérialiser les objets, par ex. au format JSON.

Le premier réflexe que j'ai eu était d'utiliser l'introspection en Python, mais j'ai rencontré des problèmes lors de l'introspection de champs de clés étrangères dans les modèles django. Peut-être que je devrais jeter un oeil sur le code du projet django-docs (disponible sur google code). Enfin, pour accélérer votre développement GWT + Django, vous pouvez utiliser une servlet proxy http en mode hébergé, de sorte que vous n'avez pas besoin de compiler vos données GWT chaque fois que vous voulez exécuter votre frontal GWT avec un Django back end. Le servlet sur http://www.servletsuite.com/servlets/httpproxy.htm fera probablement l'affaire.

3

Vous n'avez pas nécessairement à créer manuellement tous les objets Django dans JS. Le GWT se compose uniquement des objets de l'interface utilisateur et communique avec le back-end Django pour afficher les données du modèle dans le navigateur et renvoyer les mises à jour. J'ai utilisé des back-ends Django avec des frontaux Adobe Flex et GWT, et dans aucun des deux cas je n'ai dû recréer des objets Django dans JS. J'ai cependant utilisé des encodeurs JSON personnalisés dans mon back-end. Cela a été fait pour que je puisse envoyer seulement les informations nécessaires à l'interface utilisateur, plutôt que tout dans une instance de modèle (dont certaines pourraient être des informations sensibles).

1

Il est vraiment difficile de se répéter manuellement avec deux frameworks bizarres comme GWT et Django, quelque chose qui m'a finalement frustré tellement que je l'ai abandonné (j'ai écrit le premier article que vous avez mentionné). Finalement, ce que j'ai fini par faire était de passer à GWT/Java où Java était le moteur de Google App Engine. Il y a des compromis bien sûr. Le Java me semble plus difficile à mettre en place, mais plus facile une fois qu'il l'est. À la fin, le dictum DRY s'est avéré être trop d'un appel de sirène à moi. Avec GWT/GAE, vos objets passent directement à travers ET vous n'avez pas besoin de forcer votre cerveau à changer de langue. Maintenant, apprenez-en plus sur LiveCycle et Flex. ;)

J'espère que cela a du sens et a été utile - cela a été une longue semaine! :)

post-scriptum, voici le nouvel emplacement pour cette GWT/Django Tutorial-ish Post

6

Dans mon projet Django/GWT J'utilise django-piston pour exposer les modèles Django via l'API REST, au format JSON. Regardez le site Web du piston pour plus d'informations sur la façon d'atteindre ce http://bitbucket.org/jespern/django-piston/wiki/Home.Ensuite, côté GWT, il vous suffit de créer des types de superposition pour vos modèles Django (DevGuideCodingBasicsOverlay).

J'utilise GWT-Dispatch (http://code.google.com/p/gwt-dispatch/) avec une certaine bonté REST ajouté pour aller chercher mes modèles de back-end Django, mais vous pouvez vous utiliser tout ce que vous voulez (HttpRequestBuilder), puis utilisez GWT JSONParser, et en obtenant JavaScriptObject et casting, vous obtiendra votre modèle désiré dans GWT. Cela peut sembler un peu trop compliqué, mais ce n'est pas, au contraire, c'est très confortable à utiliser.

0

Je suis totalement d'accord avec Vinay Sajip. Si vous avez l'intention de créer une application avec django avec GWT, cela signifie que django serait le backend, et que GWT serait un frontal, et qu'ils communiqueraient via JSON. Par conséquent, si vous envisagez d'exposer directement votre modèle backend django au programme GWT frontal, soit votre programme est trop simple, soit vous créez avec un calque manquant, les objets de transfert de données (DTO). Quand GWT frontal info présente, il n'a pas besoin de tous les attributs du modèle backend, en fait, il ne doit transférer que ce dont il a besoin.

Un exemple simple est que si vous créez une application de messagerie, vous ne voulez sûrement pas transférer tout le contenu du corps de l'e-mail lorsque vous chargez la liste des titres de l'e-mail. (Allumez firebug et espionnez gmail, vous serez ravi)

Je me suis battu avec le même problème un certain temps aussi, surtout si vous suivez la ligne de pensée RPC.

Questions connexes