2009-07-10 7 views
6

Así que sé que puedo comunicarme entre esos dos usando JSON, pero también sé que tendría que recrear manualmente todos los objetos de Django en JS.¿Cómo usar Django con GWT?

¿Conoces alguna herramienta o biblioteca que pueda ayudarme a hacer eso? ¿O tal vez incluso una mejor manera de lograr el mismo objetivo?

Sólo he encontrado estos dos: http://palantar.blogspot.com/2006/06/agad-tutorial-ish-sort-of-post.htmlDjango + GWT or Jquery

Pero entonces todavía tendría que reflejar manualmente mis objetos, lo que violaría SECO.

+0

Como dice Vinay, no tienes que volver a crear todos tus objetos Django en GWT. Use GWT como front-end y Django como back-end. Hace unos meses pasé por el proceso de configuración de un proyecto de Django/GWT haciendo exactamente lo anterior, y noté rápidamente la completa ausencia de tutoriales actualizados sobre el tema. Debido a esto, traté de cubrir la mayoría de los temas relevantes de vincular GWT y Django en mi blog, incluyendo cómo comunicarme a través de JSON. http://andersguide.wordpress.com/2013/05/01/using-json-for-communication-between-gwt-and-django/ – user2340471

Respuesta

2

Si desea crear un nuevo modelo, tanto en GWT como en Django, la forma más fácil de generar código es comenzar desde una definición de modelo muy simple, p.

classname 
attribute1 type1 
attribute2 type2 

de análisis que con un poco de Python es muy fácil, y el código de modo que se genera tanto para Django y GWT una vez que se analiza sintácticamente las líneas anteriores parecidos. La personalización para Django y GWT solo requerirá un poco más de trabajo. Tener en cuenta las claves foráneas es más complicado. No olvides un pequeño método generado para serializar los objetos, p. en formato JSON.

El primer reflejo que tuve fue utilizar la introspección en Python, pero luego tuve problemas al introspectar campos de claves externas en los modelos django. Tal vez debería echar un vistazo al código del proyecto django-docs (disponible en el código de google).

Por último, para acelerar su desarrollo GWT + Django, se puede utilizar un servlet HTTP proxy en modo alojado, de manera que no es necesario para compilar el material GWT cada vez que se desea ejecutar su GWT extremo frontal con una Django back end. El servlet en http://www.servletsuite.com/servlets/httpproxy.htm probablemente sea el truco.

3

No es necesario crear manualmente todos los objetos de Django en JS. El GWT consiste solo en los objetos UI, y se comunica con el back-end de Django para que los datos del modelo se muestren en el navegador y para que le devuelvan las actualizaciones. Utilicé los back-ends de Django con los frontales de Adobe Flex y GWT, y en ninguno de los casos tuve que volver a crear ningún objeto de Django en JS. Sin embargo, utilicé codificadores JSON personalizados en mi back-end. Esto se hizo para poder enviar solo la información que necesita la IU, en lugar de enviarla en una instancia modelo (parte de la cual podría ser información confidencial).

1

Es realmente difícil moverse de forma manual repitiéndose con dos marcos peculiares como GWT y Django, algo que finalmente me frustró tanto que lo abandoné (escribí el primer artículo al que se refería).

Eventualmente, lo que terminé haciendo fue pasar a hacer GWT/Java donde Java era el motor de aplicaciones de Google. Hay compensaciones, por supuesto. El Java me parece más difícil de configurar, pero más fácil una vez que lo es. Al final, el dictamen DRY resultó ser una especie de sirena para mí. Con GWT/GAE, tus objetos simplemente pasan directamente Y no necesitas obligar a tu cerebro a cambiar de idioma. Ahora, aprende sobre LiveCycle y Flex. ;)

Espero que haya tenido sentido y haya sido útil: ¡ha sido una semana larga! :)

P. S., aquí está la nueva ubicación para que GWT/Django Tutorial-ish Post

6

En mi proyecto Django/GWT hago uso de Django-pistón para exponer modelos de Django través de la API REST, en formato JSON. Mira el sitio web de pistón para más información sobre cómo lograr eso http://bitbucket.org/jespern/django-piston/wiki/Home.

Luego, en el lado GWT, solo necesita crear tipos de superposición para sus modelos Django (DevGuideCodingBasicsOverlay).

utilizo GWT-despacho (http://code.google.com/p/gwt-dispatch/) con un poco de bondad RESTO añaden a buscar a mis modelos de Django backend, pero se puede usar lo que quieras (HttpRequestBuilder), a continuación, utilizar GWT JSONParser, y obteniendo JavaScriptObject y la colada, se obtendrá su modelo deseado en GWT. Puede parecer un poco complicado, pero no lo es, sino todo lo contrario, es muy cómodo de usar.

0

Estoy totalmente de acuerdo con Vinay Sajip. Si tiene la intención de crear una aplicación con django con GWT, significa que django será el servidor, y GWT sería una interfaz y se comunicarán a través de JSON.

Así que si está pensando en exponer su back-end modelo django directamente al programa frontend GWT, su programa es demasiado simple o está diseñando con una capa faltante, los objetos de transferencia de datos (DTO). Cuando GWT frontend presenta información, no necesita todos los atributos del modelo backend, de hecho, debe transferir solo lo que necesite.

Un ejemplo simple es que si está creando una aplicación de correo electrónico, seguramente no desea transferir todo el contenido del cuerpo del correo electrónico cuando está cargando la lista de títulos del correo electrónico. (Enciende Firebug y espía en Gmail, estarás encantado)

Tuve problemas con el mismo problema en algún momento también, especialmente si sigues la línea de pensamiento de RPC.