【问题标题】:How to use Django with GWT? [closed]如何在 GWT 中使用 Django? [关闭]
【发布时间】:2010-11-09 16:14:12
【问题描述】:

所以我知道我可以使用 JSON 在这两者之间进行通信,但我也知道我必须在 JS 中手动重新创建所有 Django 对象。

您知道任何可以帮助我做到这一点的工具或库吗?或者甚至是实现相同目标的更好方法?

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

但是我仍然必须手动镜像我的对象,这会违反 DRY。

【问题讨论】:

  • 正如 Vinay 所说,您不必在 GWT 中重新创建所有 Django 对象。使用 GWT 作为前端,使用 Django 作为后端。几个月前,我完成了设置 Django/GWT 项目的过程,并完全按照上述方式进行操作,并很快注意到完全没有关于该主题的最新教程。因此,我尝试在我的博客上介绍将 GWT 和 Django 链接在一起的大部分相关主题,包括如何通过 JSON 进行通信。 andersguide.wordpress.com/2013/05/01/…

标签: django json gwt


【解决方案1】:

在我的 Django/GWT 项目中,我确实使用 django-piston 通过 REST API 以 JSON 格式公开 Django 模型。查看活塞的网站,了解更多关于如何实现这一目标的信息http://bitbucket.org/jespern/django-piston/wiki/Home

然后,在 GWT 方面,您只需为您的 Django 模型创建覆盖类型 (DevGuideCodingBasicsOverlay)。

我使用 gwt-dispatch (http://code.google.com/p/gwt-dispatch/) 并添加了一些 REST 优点来从 Django 后端获取我的模型,但是你可以使用任何你想要的 (HttpRequestBuilder),然后使用 GWT JSONParser,并通过获取JavaScriptObject 和铸造,你会在 GWT 中得到你想要的模型。它可能看起来有点过于复杂,但实际上并非如此,恰恰相反,它使用起来非常舒适。

【讨论】:

    【解决方案2】:

    您不必在 JS 中手动创建所有 Django 对象。 GWT 仅包含 UI 对象,并与 Django 后端通信以获取模型数据以显示在浏览器中,并发送回更新。我已经将 Django 后端与 Adob​​e Flex 和 GWT 前端一起使用,在这两种情况下,我都不必在 JS 中重新创建任何 Django 对象。但是,我确实在后端使用了定制的 JSON 编码器。这样做是为了让我只能发送 UI 所需的信息,而不是模型实例中的所有内容(其中一些可能是敏感信息)。

    【讨论】:

      【解决方案3】:

      如果你想在 GWT 和 Django 中创建一个新模型,生成代码的最简单方法是从一个非常简单的模型定义开始,例如

      classname
      attribute1 type1
      attribute2 type2
      

      用一点 Python 来解析它非常容易,一旦你解析了上面类似的行,为 Django 和 GWT 生成代码也是如此。 Django 和 GWT 的定制只需要多做一点工作。考虑外键更复杂。不要忘记一个很小的生成方法来序列化对象,例如JSON 格式。

      我的第一个反应是在 Python 中使用自省,但后来在 django 模型中自省外键字段时遇到了麻烦。也许我应该看一下 django-docs 项目的代码(可在 google 代码中找到)。

      最后,为了加快你的 GWT+Django 开发,你可以在托管模式下使用 http 代理 servlet,这样你就不需要每次想用 Django 运行 GWT 前端时都编译你的 GWT 东西后端。 http://www.servletsuite.com/servlets/httpproxy.htm 上的 servlet 可能会解决问题。

      【讨论】:

        【解决方案4】:

        用 GWT 和 Django 等两个古怪的框架手动重复自己真的很难,这最终让我非常沮丧,我放弃了它(我写了你提到的第一篇文章)。

        最终,我转而使用 GWT/Java,其中 Java 是 Google App Engine。当然也有取舍。在我看来,Java 似乎更难设置,但一旦设置起来就更容易了。最后,事实证明,DRY 格言对我来说太像警笛声了。使用 GWT/GAE,您的对象直接通过,您无需强迫您的大脑在语言之间切换。现在开始了解 LiveCycle 和 Flex。 ;)

        希望这很有意义并且对您有所帮助 - 这是漫长的一周! :)

        P.S.,这是 GWT/Django Tutorial-ish Post 的新位置

        【讨论】:

          【解决方案5】:

          我完全同意 Vinay Sajip 的观点。如果你打算用 django 和 GWT 创建一个应用程序,这意味着 django 是后端,GWT 是前端,它们通过 JSON 进行通信。

          因此,如果您正在考虑将您的后端 django 模型直接暴露给前端 GWT 程序,那么您的程序要么过于简单,要么您正在设计缺少层,即数据传输对象 (DTO)。当 GWT 前端呈现信息时,它不需要来自后端模型的所有属性,实际上,它应该只传输它需要的任何内容。

          一个简单的例子是,如果您正在创建一个电子邮件应用程序,您肯定不想在加载电子邮件标题列表时传输所有电子邮件正文内容。 (启动萤火虫并监视 gmail,你会很高兴)

          我也曾为同样的问题苦苦挣扎过一段时间,尤其是当您遵循 RPC 思路时。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-26
            • 2011-12-23
            • 2013-03-20
            • 2011-09-25
            • 2013-02-15
            • 2015-02-01
            • 1970-01-01
            相关资源
            最近更新 更多