【发布时间】:2012-01-30 14:28:36
【问题描述】:
根据这个问题:
开始使用 GAE/Django 的最简单方法是使用 Django 非 rel 包。然而,既然最新的 Python/GAE SDK 包含了 Django 的构建,我们还需要这个吗?
现在在 GAE 上开始使用 Django 的最佳实践是什么?
谢谢
【问题讨论】:
根据这个问题:
开始使用 GAE/Django 的最简单方法是使用 Django 非 rel 包。然而,既然最新的 Python/GAE SDK 包含了 Django 的构建,我们还需要这个吗?
现在在 GAE 上开始使用 Django 的最佳实践是什么?
谢谢
【问题讨论】:
更新:似乎Web app2 是新项目最简单的选择。
这个guest article 建议
"App Engine 确实提供了一些 Django 支持,但这主要是 只有模板和视图。”
non-rel 似乎仍然是您最好的选择。尽管我会提醒您,根据their blog,可能不会进行进一步的开发和/或维护。
【讨论】:
普通 Django 模型没有支持 GAE 数据存储的后端。因此,您不能使用 Django 模型,因此也不能使用 Django 的模型形式。您必须使用从 GAE 的 python db.Model() 派生的模型。您可以使用 google.appengine.ext.db.djangoforms,而不是为表单使用 Django 的 ModelForm 类。请注意,这是专门针对 ModelForms 的,其他表单也可以正常工作,因为它们不绑定到数据库。
我可以想到两个使用 Django-nonrel 的好理由: 1a)您在 Django 上有一个现有项目。使用 Django-nonrel 将是最懒惰的方式。将模型重写为 GAE 的模型并不太难,但这可能是一个小麻烦,尤其是如果 1b)您使用了很多现有的 Django 组件,并且您必须通过所有这些组件来更新模型和表单。 2) 你想对冲你对 GAE 的赌注。使用 Django-nonrel 可以让您轻松切换到 MongoDB,因为 Django-nonrel 有一个正常工作的 MongoDB 后端。当前的 Django-nonrel 维护者似乎对 MongoDB 更感兴趣。
使用过 Django-nonrel,到目前为止,我遇到了一些可能是一个错误选择的原因: 1) 不支持祖先查询。不过,对此有一个出色的拉取请求。不过,它不会与任何其他数据库后端兼容。 2) ndb 即将问世,似乎它还有更多好处,可能不会在 Django-nonrel 上看到支持。
如果您确实使用 GAE 的原生 db API,那么 Django 的主要好处将是表单验证。否则,webapp2+jinja2+gae db.Models() 将提供与 Django 类似的功能。
【讨论】: