【问题标题】:Django and App EngineDjango 和 App 引擎
【发布时间】:2010-12-31 13:59:48
【问题描述】:

我想检查当前在 Google App Engine 上运行 Django 的状态,以及在 GAE 上运行 django 与仅使用 Webapp 相比有什么好处。

Django 的主要杀手级功能,恕我直言,是可重用的应用程序和中间件。不幸的是,当前大多数 Django 应用程序都使用模型或模型表单(django-tags、django-reviews、django-profiles、Pinax 应用程序)。

那么,django 还有哪些功能或优势仍然可以在 Google App Engine 中运行(除了被禁用的:流行的 django 应用、会话和身份验证中间件、用户和管理员、模型等)。

另外,是否有在 App Engine 中也可以运行的 Django 应用的列表?

【问题讨论】:

标签: django google-app-engine


【解决方案1】:

app-engine-patch 让大部分这些东西在 AppEngine 中工作 - 所以你可以(大部分)使用直接的 Modelforms,使用 Django 用户和管理员等。

我只将它用于相当简单的项目(对 django 来说很新),但他们声称大多数 Django 应用程序(最多)可以在 appengine 上进行微小的修改。例如,app-engine-patch 使用 AppEngine 模型类而不是 Django 类;还有一些基本视图效率太低,无法在 Appengine 上运行。

补充:google-app-engine-django 类似;但提供了一个看起来与 Django 的 BaseModel 相同的 BaseModel。我的理解是 google-app-engine-django 是由 Google 发布的,然后分叉创建 app-engine-patch。 app-engine-patch 的维护者似乎与 google-app-engine-django 的创建者有一些不同的目标,因此您可能会发现两者中的一个比另一个更适合您的需求。

Google 提供了some articles 在 appengine 上运行 Django 应用程序;最近的实际上是来自 app-engine-patch 的作者的客座帖子。

【讨论】:

  • app-engine-patch 似乎在过去四个月里已经被放弃了,这两个项目都对可重复使用的应用程序(Ponix 等)没有帮助。 Google 文章似乎有点老了(只有 2009 年 5 月的一篇文章,其他的都是 2008 年的文章)。
【解决方案2】:

app-engine-patch 目前拥有大部分 django 功能,包括会话、contrib.auth、站点和一些其他标准 django 应用程序。但是,它的主要缺点(我认为)是它使用 django 修改版本的 zip 文件来实现此功能,并且当前的维护者似乎没有跟上当前 django 版本的步伐。目前,过去和现在的维护者似乎一致认为这种方法维护起来太麻烦,因此目前没有人维护它。

google-app-engine-django,使用包含在生产 GAE 运行时中的最新 django 版本的猴子补丁方法,因此只要 google 继续跟踪 django 版本,您就会及时了解 django。但是,它目前还没有完全移植 contrib.auth,因此您只能使用 google 帐户进行身份验证 - 这可能是一个很大的缺点,具体取决于您是否希望 contrib.auth 用户模型像您所知道的那样在 sql 后端工作。与 app-engine-patch 一样,帮助程序中也没有 django 管理员支持。存在一个fork of django-app-engine-django,它添加了一些贡献应用程序,例如平面页面、站点和站点地图。另请注意,它仅适用于最高 1.1 的 django 版本,直到将 issue #3230 Django 1.2 添加到 use_library,除非您将 django 作为 zip 文件上传。

app-engine-patch 的原始开发者已经在开发django-nonrel 分支,但这可能距离包含在 django 版本中还很远。这个django developers thread 有很多关于这些努力的信息。

另外,有一个google summer of code 项目致力于整合非相关数据库的某些方面。

【讨论】:

  • 谢谢。很高兴看到 django 对 gae 的支持朝着更好的方向发展,并且这个目标没有被放弃。
【解决方案3】:

通过简单地挑选和选择我需要的 Django 功能并将它们自己修补到 webapp 中,我取得了最大的成功。在我最新的项目中,我实际上只是完全删除了 webapp 的东西。我仍然导入和调用几个 webapp 实用程序函数,但它主要是由 GAE 和 Django 的优秀部分构建的手动应用程序。

【讨论】:

    【解决方案4】:

    您可能有兴趣查看 web2py,这是另一个 Python 框架,据说 GAE 和“普通”网络服务器之间的摩擦较小。

    【讨论】:

      【解决方案5】:

      随 App Engine has been updated to 1.2.5 提供的 Django 版本和最新的 SDK 版本(1.4.2changelog)。此版本可通过use_library() 声明获得,因此您不再需要在相同程度上搞乱猴子补丁。

      【讨论】:

        【解决方案6】:

        除了 Python 标准库、GAE 工具和 GAE Python 运行时环境之外,GoogleAppEngine (GAE) Python 2.7 运行时还提供了多个您的应用程序可以使用的第三方库。其中之一是 Django。以下是从third-party libraries 上的 GAE 文档页面复制的:

        要在 Python 2.7 中使用 Django,请在 app.yaml 中指定 WSGI 应用程序和 Django 库:

        ...
        handlers:
        - url: /.*
          script: main.app  # a WSGI application in the main module's global scope
        
        libraries:
        - name: django
          version: "1.2"
        

        【讨论】:

        • “但是,使用 Django 数据建模接口的第三方 Django 应用程序(尤其是 Django 的 Admin 应用程序)可能无法直接与 App Engine 一起使用”——来自页面。
        • @notnoop 确实如此。但是通过Google Cloud SQL,这可能很快就会改变。一旦使用托管的 App Engine 应用程序部署了数据库,就应该支持标准的 Django 模型相关功能(包括 Django 管理员)。更多关于这个here.
        【解决方案7】:

        现在在 GAE 上使用完整的 Django 非常容易: https://developers.google.com/appengine/articles/django-nonrel#ps

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-30
          • 2011-09-22
          • 2013-09-29
          • 1970-01-01
          • 1970-01-01
          • 2013-08-01
          • 2011-01-03
          • 2014-04-11
          相关资源
          最近更新 更多