2009-07-10 23 views
6

所以我知道我可以使用JSON在這兩者之間進行通信,但我也知道我必須手動重新創建JS中的所有Django對象。如何在GWT中使用Django?

你知道任何可以幫助我做到的工具或庫嗎?或者甚至可能是實現相同目標的更好方式?

我只找到兩個:http://palantar.blogspot.com/2006/06/agad-tutorial-ish-sort-of-post.htmlDjango + GWT or Jquery

但我仍然要手動鏡子,我的對象,這將違反DRY。

+0

作爲維奈說,你不必重新創建GWT所有Django的對象。使用GWT作爲前端,Django作爲後端。幾個月前,我完成了設置Django/GWT項目的過程,並且很快發現完全沒有關於此主題的最新教程。正因爲如此,我試圖涵蓋大部分將GWT和Django鏈接到我的博客上的相關主題,包括如何通過JSON進行通信。 http://andersguide.wordpress.com/2013/05/01/using-json-for-communication-between-gwt-and-django/ – user2340471 2013-05-01 19:11:47

回答

2

如果要在GWT和Django中創建新模型,生成代碼的最簡單方法是從一個非常簡單的模型定義開始,例如,

classname 
attribute1 type1 
attribute2 type2 

解析與一點點Python是很容易的,而且兩個Django和GWT所以生成的代碼,一旦你解析上述般的線條。 Django和GWT的定製只需要更多的工作。考慮到外鍵更復雜。不要忘記一小段生成的方法來序列化對象,例如以JSON格式。

我的第一個反思是在Python中使用自省,但後來在django模型中反省外鍵字段時遇到了麻煩。也許我應該看看django-docs項目的代碼(可在google代碼中找到)。最後,爲了加速你的GWT + Django開發,你可以在託管模式下使用http代理servlet,這樣你就不需要每次運行你的GWT前端都編譯你的GWT的東西, Django後端。 http://www.servletsuite.com/servlets/httpproxy.htm上的servlet可能會訣竅。

3

您不必在JS中手動創建所有Django對象。 GWT僅由UI對象組成,並與Django後端通信以獲取模型數據以在瀏覽器中顯示,併發回更新。我用Django後端同時使用了Adobe Flex和GWT前端,並且在任何情況下我都不必在JS中重新創建任何Django對象。但是,我在後臺使用了自定義的JSON編碼器。這樣做是爲了只發送UI所需的信息,而不是模型實例中的所有信息(其中一些可能是敏感信息)。

1

真的很難避免用GWT和Django這兩個古怪的框架來手動重複自己,最終讓我非常沮喪,因此我放棄了它(我寫了你提到的第一篇文章)。

最終,我最終做的是切換到GWT/Java,其中Java是Google App Engine。當然有折衷。 Java在我看來似乎更難以設置,但一旦變得更容易。最後,DRY格言證明對我來說太過警惕。使用GWT/GAE,你的對象只是直通,你不需要強迫你的大腦在語言之間切換。現在瞭解LiveCycle和Flex。 ;)

希望這是有道理的,是有益的 - 這是一個漫長的一週! :)

P.S.,這裏是爲GWT/Django Tutorial-ish Post

6

在我的Django/GWT的項目,我做使用Django活塞通過REST API暴露Django模型,JSON格式的新位置。查看活塞的網站,瞭解更多關於如何實現http://bitbucket.org/jespern/django-piston/wiki/Home的信息。

然後,在GWT的一面,你只需要爲你的Django模型(DevGuideCodingBasicsOverlay)創建覆蓋類型。

我使用GWT-訊(http://code.google.com/p/gwt-dispatch/)與一些REST善良加來從Django的後端我的模型,但你可以使用你任何你想要的(HttpRequestBuilder),然後使用GWT JSONParser,並通過獲取JavaScriptObject和鑄造,你將在GWT中獲得你想要的模型。這看起來可能有些複雜,但並不完全相反,它使用起來非常舒適。

0

我完全維奈Sajip同意。如果您打算使用帶有GWT的django創建應用程序,則意味着django將成爲後端,而GWT將成爲前端,並且它們通過JSON進行通信。

因此,如果您正在考慮將您的後端django模型直接暴露給前端GWT程序,那麼無論您的程序是否太簡單,或者您正在設計缺少圖層的數據傳輸對象(DTO)。當GWT前端呈現信息時,它不需要來自後端模型的所有屬性,事實上,它只應該傳輸任何它需要的信息。

一個簡單的例子是,如果你正在創建一個電子郵件應用程序,你當然不希望全部轉讓給當加載郵件標題列表的電子郵件正文內容。 (火了Gmail的螢火蟲和間諜,你會很高興)

我同樣的問題掙扎過一段時間,特別是如果你是以下思維的RPC線。