如何将Django项目迁移到Google App Engine

时间:2012-02-12 10:22:18

标签: django google-app-engine

我正在寻找将Django项目迁移到Google App Engine并使用Google数据存储区的指南。我发现的大多数指南都使用Django-nonrel与Django-Appengine相关联(但我想使用GAE的原生支持)。

通过GAE getting started guide,它说:

  

Google App Engine支持使用纯Python编写的任何使用CGI(以及任何使用CGI适配器的WSGI兼容框架)的框架,包括Django,CherryPy,Pylons,web.py和web2py。 您可以将自己选择的框架与应用程序代码捆绑在一起,方法是将其代码复制到应用程序目录中。

据我所知,在这种情况下我将无法使用Django的某些功能(主要是管理功能),还需要重新构建模型。

从其他阅读中,我还发现最新的GAE SDK现在包含了Python 2.5上的Django 1.3。

我试图将我的Django应用程序中的所有文件放到GAE项目中,但无法将它们全部合并到一起工作。

请提供一些基本指南,用于将我的Django项目迁移到Google App Engine的代码。

感谢。

3 个答案:

答案 0 :(得分:2)

我使用的是django-nonrel,它的行为与django非常相似,只不过使用JOIN的操作会返回错误。我基本上通过避免ManyToMany字段来解决这个问题,并且基本上使用中间表手动构建该功能。

到目前为止,我遇到了Django-nonrel的两个问题: 1.无法访问可以在事务中运行的祖先查询。但是有一个待处理的拉取请求。 2.您不能指定未编制索引的字段。这可能会显着增加您的写入成本。我有想法解决这个问题,但我还没有这样做 (编辑:您可以指定未编制索引的字段,我已经验证了这种方法很有效)。 2(新)。谷歌正在推动一个名为ndb的新数据库后端,该后端执行自动缓存和批处理,django-nonrel将无法使用。

如果您决定不使用django-nonrel,主要区别在于Django模型不能在App Engine下运行。您必须重写模型以从App Engine的db.Model继承。您使用Django的ModelForm的表单需要继承google.appengine.ext.db.djangoforms。一旦你使用App Engine,你就必须移植Django,如果你曾经把你的应用程序带到其他地方。

答案 1 :(得分:2)

对于现有的Django应用程序,使用django-nonrel是最简单的方法;它非常受欢迎,因此您应该能够快速找到有关特定错误的帮助。

本文中写了另一种方法:http://code.google.com/appengine/articles/pure_django.html - 它采用另一种方式,采用使用Django进行调度,模板和表单的App Engine应用程序,但不用于模型,并描述如何让它在原生的Django环境中运行。也许你可以从中收集一些有用的提示。

答案 2 :(得分:1)

如果您已有Django应用程序,则可能需要检查this。您不会使用App Engine的数据存储区,但Google Cloud SQL可能符合您的需求。