Google App Engine学习日志(一)使用Django 1.0 部署django_example

开篇的废话

    虽然GAE(http://appengine.google.com/)已经发布挺久了,而且我也在第一时间去抢了个测试名额,只是一直都没再去关注。说来我并不是太喜欢GAE这东西。GAE就是一个平台,要使用还得先学习一遍。而且由于限制很多,导致程序的移植性不怎么样。差不多用了GAE以后,就很难将应用再部署到自己的服务器上了。不过我想找个地方放东西,做一些自己的小应用玩,除了GAE外还真找不到啥其他比较好的免费资源。
    废话基本上说完了,下面开始正式进入主题。

准备工作(申请开通GAE)

    GAE在刚发布的时候需要先提交申请,再等待开通,现在似乎已经放宽限制可以随便申请了。但开通项目的时候会提示要用手机接收验证码。有人说移动的手机无法接收验证码,不过我的移动号码没遇到问题。这里需要注意的是,google是面对全球服务的,手机号码前需要添加国家标识,中国大陆的是86。
    使用GAE需要下载Google提供的GAE SDK。GAE SDK就是一个普通的安装包,直接安装就可以使用的。GAE计划支持多种开发语言,不过就目前而言还只支持python,因此在安装GAE前确保Python已经安装也是必须的。

安装范例程序django_example

    GAE本身就是一个WEB开发框架,即使不使用任何其他的WEB开发框架也可以直接使用。不过选用一个自己熟悉的,或者是自己认为方便的第三方开发框架也是一个不错的选择。目前GAE官方支持的WEB开发框架有Django0.96/pylons/web.py等。不过即使是GAE没有官方提供的,你也可以选择自己安装。
    由于对Django比较熟悉,而且万一日后真的需要迁移到自己的服务器上,使用Django开发日后的迁移工作也可以相对轻松点。选定Django做GAE的web开发框架。
    为了尽快的了解GAE的特性,我直接去GAE的sample项目(http://code.google.com/p/google-app-engine-samples/)上将Django的sample(django_example_20080409.tar.gz)给down了回来。
    解压后,运行命令dev_appserver.py django_example/,sample就跑起来了。可以使用http://localhost:8080/进行访问。这个Demo提供了简单的登陆/添加/修改功能。
    简单的看了下目录结构,其中下面几个文件比较重要。
|-app.yaml
|-django_bootstrap.py
|-index.yaml
app.yaml
    应用程序的基本配置信息,主要就是程序名,以及url映射。这里所有的url都交给django_bootstrap.py处理。
index.yaml
    这个文件是建索引用的。
django_bootstrap.py
    这其实就是一个wsgi的处理程序,将请求以wsgi的形式交给django进行处理。

更新Django到1.0

    如果使用GAE自带的Django,不需要做任何配置,不过现在Django1.0已经发布,似乎没有必要再使用0.96。于是动手将Django升级到1.0。
    察看官方的相关教程使用zipimport引入Django1.0(使用zipimport主要是GAE有文件数限制,而django的文件数本来就不少)。
    具体做法文章里已经说得比较清楚,我就不再啰嗦。不过有个问题需要注意的,在windows下会出现问题’module’ object has no attribute ‘unlink’,在网上看了下GAE将os的unlinlk给禁用了,需要做点修改。
在django_bootstrap.py里加上
if os.name == ‘nt’:
  os.unlink = lambda: None
更新后sample终于再次跑起来了,不过不幸的是点击添加gift的时候再次出错。这次是Django的错误。可能是Django在1.0里对url tag有做改动,在参数不存在的时候会出错。修改gift.html,将表单的提交地址修改为action=""。
    所有问题修正,使用命令appcfg.py update haoluobo/(haoluobo?:),我换了个自己喜欢的名字)上传到服务器。访问服务器http://haoluobo.appspot.com/,应用已经跑在Google的服务器上了。

后记

    没想到写个简单的学习日志这么费事,不知道还会不会有后继的日志。