使用Google App Engine Helper for Django

原文链接: http://code.google.com/appengine/articles/appengine_helper_for_django.html

译文链接: http://danmarner.yo2.cn/appengine_helper_for_django_cn/

引言

Google App Engine可以运行任何WSGI兼容的程序。由于Django支持该标准,所以在Google App Engine上建立(或者移植既成的)Django程序是完全可能的。

本文将通过重新包装Django官方教程 中问卷调查程序的开始部分来让你体验建立一个Django项目并且在Google App Engine上面运行的全过程。 各步骤中针对App Engine环境的改动是本文的重点。

理解Google App Engine中的Django环境

Google App Engine提供的环境与Django程序相比有两个主要区别:

Google App Engine不提供SQL数据库,所以你无法使用Django的标准Model类。 Google App Engine限制了Django一部分模块的导入和使用(例如建立和删除数据库)。

我们创建了一个helper程序来省掉这些区别给你带来的麻烦。这个helper程序提供了Django在Google App Engine无法使用部分的替代实现。

获取Helper

你可以在这个开源项目的网站下载该helper模块:http://code.google.com/p/google-app-engine-django。

下载它并且解压到mysite文件夹里(DaNmarner:修改解压缩后得到的文件夹名为mysite)。

在这个文件夹里你可以看到一个标准Django工程的结构(settings.py, url.py等等)以及一个名为appengine_django的子文件夹(或者根据Django的术语,程序)。这就是整合Django和Google App Engine的helper了。

接入Google App Engine SDK

helper程序使用到了Google App Engine SDK。如果你在使用Mac OS并且你使用了Google提供的安装程序你可以立即进入下一步(确认环境设置正确) 。Helper知道安装程序安装SDK的位置并且会自动的从那里到入它。

如果你在使用Windows和Google提供的SDK安装程序,你还需要安装Pythong for Windows扩展来让helper自动找到SDK的位置。

最后,如果你在使用Linux,或者你在Windows或Mac OS下面使用zip源文件,你需要在前面建立的mysite文件夹里复制或链接解压缩以后的SDK为 .google_appengine (注意开头有个点,这是个隐藏文件夹)。

在Linux或者Mac OS力你可以通过下面的命令来实现这一点。在mysite文件夹里运行它:

ln -s SDK目录 .google_appengine

确认环境设置

为了确认环境设置正确,你可以开启服务。确保当前目录是mysite,输入如下命令:

python manage.py runserver

你应该可以看到类似下面这样的输出:

INFO:root:Checking for updates to the SDK.
INFO:root:The SDK is up to date.
INFO:root:Running application appengine-django-example on port 8080: http://localhost:8080

在你的浏览器中登陆 http://localhost:8080/ 你将会看到标准的Django欢迎页面。在幕后helper程序重写了Django默认的runserver命令,使之运行Google App Engine提供的 dev_appserver 命令。

你也可以在helper里运行Django的test工具。

INFO:root:Checking for updates to the SDK.
INFO:root:The SDK is up to date.
INFO:root:Running application appengine-django-example on port 8080: http://localhost:8080

更改程序名

用你喜欢的编辑器打开app.yaml,把application那一行包含的名字改为你的程序名。例如:

application: mysite

(DaNmarner:别忘了冒号后面的空格)

helper需要通过这个信息来为你的项目在你电脑上建立一个专供开发使用的datastore(DaNmarner:GAE提供的数据库)。

建立一个Django程序

你现在可以在这个项目中建立一个Django程序来包含你的models,views和tests了。你也可以使用标准的manage.py startapp命令搞定:

python manage.py startapp polls

不出意外这个命令会创建一个叫做polls的文件夹,其中包含:

__init__.py
models.py
views.py

建立Models

polls程序包含两个model:polls和choice(DaNmarner:参见Django的官方教程)。你需要用helper和Google App Engine提供的datastore属性来建立它们。标准的Django Model和Property类是无法使用的。虽然你的models无法使用Django的Model类,helper会确保这些model和Django的形式相近并且在Django里注册这些models。

编辑 polls/models.py 为:

from appengine_django.models import BaseModelfrom google.appengine.ext import db

class Poll(BaseModel): question = db.StringProperty() pub_date = db.DateTimeProperty('date published')

class Choice(BaseModel): poll = db.ReferenceProperty(Poll) choice = db.StringProperty() votes = db.IntegerProperty()

激活Models

使用Google App Engine的时候你不用显式的为model创建数据表。sql*, syncdb和validate命令也因而变成了多余的。helper程序把他们从manage.py中删除掉了,别用它们。

要激活你的models,你只需要编辑settings.py并且确保polls程序在INSTALLED_APPS里。

探索API

helper模块支持Python的交互命令界面,并且确保它使用正确的配置来访问开发过程中的数据库服务。你可以通过熟悉的方式来进入Python交互界面:

python manage.py shell

这个交互界面没有像服务器中那么多的限制。

Django管理后台

Django的管理后台和Google App Engine不支持的SQL类数据库紧密相关。 一个可以取而代之的管理界面已经自动的由开发服务在 /_ah/admin 提供了。 例如 http://localhost:8080/_ah/admin。

Views,Forms和URLs

URL配置和view函数在Google App Engine里没有什么改变。 由于你的models不是从Django Model类建立的,你将无法使用Django Form类。 Google App Engine SDK在 google.appengine.ext.db.djangoforms提供了一个兼容App Engine的替代品。djangoforms模块也可以单独使用。

继续开发

到了这里你应该可以使用上面提供的技巧继续开发下去。本文剩余的部分会介绍一些helper的实现细节和一些它用以测试的高级特性,以及项目的上传。

Django的版本

helper支持Django最新的稳定版(0.96)以及目前的开发版本。如果你偏爱使用稳定版,那你什么也不用安装。像往常一样导入Django模块就可以了。

要使用开发版本,你需要把Django和你的程序一起上传。下载源文件结构然后复制到你程序的文件结构里:

my_application/app.yaml
my_application/main.py
my_application/django/*

删除以下的文件来减少文件数量是安全的:

django/bin
django/contrib/admin
django/contrib/databrowse

上传程序

如果你使用以上描述的Django 0.97并且在http://appengine.google.com注册了你的程序,你可以使用manage.py的update命令一步搞定上传步骤:

python manage.py update

这和运行Google App Engine SDK的appcfg.py命令是等价的。你可以用同样的方法访问rollback和vacuum_indexes命令。这些命令在Django0.96(Google App Engine SDK包含的版本)的manage.py里是无法使用的。

开启WSGI Handler

helper提供的app.yaml配置文件会让服务器对所有非静态文件的请求运行main.py。main.py包含了装入helper继而开启Django WSGI Handler的代码。

你可以在 my_application/static 目录下面保存CSS,图片等静态的文件。

在App Engine使用数据库后台

helper提供了一个叫做"appengine”的虚拟数据库后台,并且让Django自动的使用它。这个后台可以确保在app服务之外运行代码的时候(例如交互界面,运行测试和上传过程中)datastore会正确的初始化。

你可以删除开发时的datastore,使用manage.py的reset和flush命令。

注意:helper为其所在的每一个Django项目配置一个单独的datastore。每个项目的datastore的路径将和Google App Engine SDK中dev_appserver.py使用的默认路径不同。

测试与调整

前文中已经提及,helper让使用标准的Django测试架构以及建立包含可操控的测试数据的样本成为可能。

对从helper提供的BaseModel衍生的models的系列化和去系列化支持YAML,JSON和XML。

model的ReferenceProperty成员全部使用使用str()来代表实例中的Key。

你可以使用manage.py标准的test,loaddata和dumpdata来进行测试和调整。

更新Django的配置

helper模块将自动的删除和修改与Google App Engine不兼容的配置。你可以用Django提供的deffsettings命令看到更新的配置和默认配置的不同部分:

python manage.py diffsettings

DATABASE_ENGINE = 'appengine'
DEBUG = True
INSTALLED_APPS = ['appengine_django']
MIDDLEWARE_CLASSES = ()
ROOT_URLCONF = 'urls' ###
SETTINGS_MODULE = 'mysite.settings' ###
SITE_ID = 1 ###
TEMPLATE_DEBUG = True
TIME_ZONE = 'UTC'

贡献你的力量

目前的helper模块仅仅实现了Django和Google App Engine整合的皮毛。如果你有一些新特性的建议或者想提交你的helper代码,请在项目站点http://code.google.com/p/google-app-engine-django/issues/entry上提交一个bug报告文件。

Leave a comment Comment RSS

Previous: Facebook中文化第二步启动

Next: QQ for Linux Preview出来了 5 Comments to “[译]使用Google App Engine Helper for Django”Tools for developing GAE | Enabling Technology! | 八月 21st, 2008 at 3:38 下午

[...] helper for Django: http://danmarner.yo2.cn/appengine_helper_for_django_cn/ Published on August 21, 2008 · Filed under: [...]

lhy | 九月 22nd, 2008 at 11:29 下午

如果你在使用Windows和Google提供的SDK安装程序,你还需要安装Pythong for Windows扩展来让helper自动找到SDK的位置。

这句话怎么理解?不明白.

mreay | 十月 20th, 2008 at 5:40 下午

Google App Engine限制了Django一部分模块的导入和使用(例如建立和删除数据库)。

这句话是否意味着sqlite也不能运行?

DaNmarner | 十月 21st, 2008 at 12:47 上午

是的,一切数据都只能通过google的datastore储存。

Sean | 二月 11th, 2009 at 12:00 下午

我这说找不到 test模块 是怎么回事?
能发mail给我说下么?我的 gae装在d盘 python 也在d盘
而且都加入了系统路径 用原来的Django没问题 但是用helper就出现错误

时间: 2024-08-07 07:09:21

使用Google App Engine Helper for Django的相关文章

用Python+Django+Google App Engine开发SNS应用(一):校内和PyXn

大家好!我是Marsbug团队的Damien.今天起,我会在本blog陆续发表一系列关于Python, Django, Google App Engine以及SNS应用开发的文章. SNS应用可以说是web2.0时代mashup概念的一个非常成功的例子.从Facebook F8平台开始,SNS应用经过1年的发展已经深入人心.而在F8开放一年之际,国内的SNS领域也开始了一场开放平台大战,这也是我们开发者一展身手的好机会.今天,让我先从开发校内应用谈起吧. 开发技术的选择 目前Marsbug已经在

Google App Engine

Google App Engine 是一种让您可以在 Google 的基础架构上运行您的网络应用程序.Google App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展.使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务. 简介 您可以使用 Google提供的免费域名(见扩展阅读)为您的应用程序提供服务,也可以使用 Google Apps 从您自己的域为它提供服务.您可以与全世界的人共享您的

使用 Eclipse 在 Google App Engine 上创建 mashup,第 3 部分: 使用 RESTful Web 服务

使用社会网络可以更轻松地获取并聚合数据,从而创建富有革新精神的新 Web 应用程序.但是,仍然必须处理创建可伸缩 Web 应用程序的所有常见问题.现在,使用 Google App Engine (GAE) 也可以简化工作.使用 GAE,可以不必考虑管理应用服务器池的所有事务,而是集中精力创建优秀的 mashup.本文是共分三部分的系列文章 "使用 Eclipse 在 Google App Engine 上创建 mashup" 的最后一部分,在本文中,将利用并进一步增强在前两部分中构建的

使用 Eclipse 在 Google App Engine 上创建 mashup,第 1 部分: 创建应用程序

进军社会软件是为应用程序增值的好方法.使用社会网络可以更轻松地获得并聚合数据,从而创建富有革新精神的新 Web 应用程序.但是,仍然必须处理创建可伸缩 Web 应用程序的所有常见问题.现在,使用 Google App Engine (GAE) 也可以简化工作.使用 GAE,可以不必考虑管理应用服务器池的所有事务.您不必担心存储大量静态内容和动态数据.相反,您可以将精力集中在创建优秀的 mashup 上.本文是共分三部分的系列文章 "使用 Eclipse 在 Google App Engine 上

中文版Google App Engine入门指南(2)

使用webapp框架 CGI标准是很简单的,但是要把所有的代码一一写出来还是很繁重的.WEB app框架帮你解决了这些具体问题,这样你就可以将你的精力集中在你的程序的功能上了.Google App Engine支持所有用Python写的关于CGI的网站框架(包括使用CGI adaptor的 WSGI-compliant框架),包括 Django,CherryPy, Pylons, 以及 web.py..你只需要吧这个框架的代码复制到你的程序目录下就可以使用这个框架了. App Engine包括了

管理你的Google app engine项目

目前我们还不能从Google app engine直接管理项目代码文件,但是已经有人开发了相关的功能.早前,manatlan的zipme能够将Google app engine项目打包成zip文件下载到本地.最近,chendaoan Chen Baiping的GAE App files browser实现了更多管理的功能,看起来有点象Google app engine的管理页面了. GAE App files browser目前能够做到: 1. 在线浏览GAE项目文件 查看app目录结构和文件

Google App Engine应用数据中心

Google App Engine 让您可以在 Google 的基础架构上运行您的网络应用程序.Google App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展.使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务. 您可以使用 appspot.com 域上的免费域名为您的应用程序提供服务,也可以使用 Google Apps 从您自己的域为它提供服务.您可以与全世界的人共享您的应用程序,也可

中文版Google App Engine入门指南(1)

本指南将介绍如何开发以及展示一个简单的Google App Engine项目.这个示例项目-一个用户留言簿-将会向你展示如何使用Google App Engine的多项服务,包括数据库服务和谷歌帐户服务. Google App Engine入门指南包括以下几个部分: 介绍编程环境 Hello, World! 使用webapp框架 使用Google帐户服务 用webapp处理表单 使用数据库存储 使用模板 使用静态文件 上传你的程序 介绍 欢迎来到Google App Engine!创建一个App

什么是 Google App Engine?

Google App Engine 让您可以在 Google 的基础架构上运行您的网络应用程序.Google App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展.使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务. 您可以使用 appspot.com 域上的免费域名为您的应用程序提供服务,也可以使用 Google Apps 从您自己的域为它提供服务.您可以与全世界的人共享您的应用程序,也可