Django 和 App 引擎

Posted

技术标签:

【中文标题】Django 和 App 引擎【英文标题】:Django and App Engine 【发布时间】: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 应用的列表?

【问题讨论】:

可能的欺骗:***.com/questions/1011599/django-on-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.2、changelog)。此版本可通过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

【讨论】:

以上是关于Django 和 App 引擎的主要内容,如果未能解决你的问题,请参考以下文章

在 Google App Engine 上部署 Django 项目

将 appid.appspot.com 重定向到应用引擎上托管的 Django App 的自定义域的最佳方法

使用 Google App Engine 和 Django 将第三方库 (twilio) 添加到项目中

有没有办法在 Google App Engine 的 Webapp2 框架中使用 Django 模板

Django模板简介

Populate() 不是可重入的 Django Google App Engine