1、安装Python。目前google app engine上的python版本是2.5,所以我们也应该装2.5,可保证无错。python的安装很简单,到www.python.org上去下载对应版本即可。装完如果安装程序没有将python的根目录添加到系统环境变量,手动加上去。测试方法:在控制台上输python(windows平台的啊),如果提示“python不是内部或者外部命令”,就是环境变量没设好的问题。
2、安装google app engine。到http://code.google.com/intl/zh-CN/appengine/去下载google app engine,下载后直接安装即可,非常简单,并且它会自己帮你注册好环境变量,不用你手动填写。上面那个链接里有个google app engine的入门指南,很有用。不过你想快速入门,可只看我这篇文章,我会将实现一个google app engine的helloworld所要注意的所有问题都告诉你。
3、安装aptana studio IDE。写代码有个称手的IDE是挺爽的。对于写Python,我推荐aptana IDE,因为我用的就是它,还算好用。它也是基于Eclipse开发的,因此界面、使用等都跟Eclipe差不多,用过Eclipe的人应该都能很快上手。装完aptana studio后需要装个Pydev插件,想看中文的,也可以装个汉化包,这些都有,google一下应该能解决的了。
4、开始开发google app engine程序。第二步安装的google app engine包含了一个本地模拟环境,你可以将程序在网站调试好了之后再上传,你在本地看到的样子跟上传到google app engine上看到是一样的。动手写google app engine之前第一件事就是写app.yaml文件。app.yaml文件相当于一个指示器,指明application的名称、程序版本、收到指定url请求和资源请求时调用哪个文件等等。一个app.yaml的例子:application: lihuapoem version: 1 runtime: python api_version: 1 handlers: - url: /stylesheets static_dir: stylesheets - url: /.* script: lihua.py
这种写法是最常用的。我刚开始时打算在app.yaml文件里做将不同的url请求指派给不同的.py文件,后来的实践证明这样做是很糟糕的。因为很多时候处理很多不同url请求的代码都应该放在一个.py文件里。比较好的做法是将所有url请求都指向一个.py文件,然后在.py里面再指派哪个类去处理哪个url请求(当然这是对于小型系统的实现方式,如果系统较大,可以结合两种方法)。除了指派url请求,通常还要指派css和图片等资源。css就放在stylesheets文件夹里,如果有图片,将图片统一放到images里,指定文件夹名称。都一样的写法。app.yaml文件写好后,就可以打开本地模拟环境来运行你的代码了。假如你的文件夹是myEngine,那么运行模拟环境的方法是:在控制台下以下命令:
dev_appserver.py myEngine
当然你得先cd到myEngine当前文件夹。如果见到"Running application myEngine at port 8080:http://localhost:8080"时,说明成功了,可以开始下面的开发。
5、app.yaml文件写好后,就可以动手写python代码了。Python代码的框架一般是这样:
#coding=utf-8 ''' Created on 2009-9-15 @author: baiyuyang ''' import os import sys import string import random from google.appengine.api import urlfetch from google.appengine.ext.webapp import template from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app class MainPage(webapp.RequestHandler): def get(self): note = 'test' template_values = { 'note':note, } path = os.path.join(os.path.dirname(__file__), r'template/MainPage.html') self.response.out.write(template.render(path, template_values)) def url_mapping(): global url_mapping url_mapping = [ ('/',MainPage), ] url_mapping() def main(): mapping = url_mapping application = webapp.WSGIApplication( mapping, debug=True) run_wsgi_app(application) if __name__ == '__main__': main() if os.name == 'nt': os.unlink = lambda:None run_wsgi_app(application)
上面import跟java一样,导入包的工作,或许用不了import那么多。下面那个类就是处理请求主页的代码了,其它url请求也是一样的骨架来写的。这个类要注意的地方就两点,第一是那个字典对象template_values,你想传到html模版里去的值就在这里标出来;第二个就是接下去那两行代码,指定了将template_values传递到哪个html模版里去。
下面要注意的部分就是url_mapping函数。里面只有一个url_mapping字典,它指定了用什么类去处理什么url请求。
最后就是main函数了,作用是将指定的url_mapping字典传给run_wsgi_app()函数执行。
这个文件实际上就是在MVC模型里的control工作,M层也是一个.py文件,里面用N个类来定义数据模型。剩下的工作就是V层了。
在html里用什么来表示是从C层传来的值呢?看一个例子:
html代码里用{{}}和{%%}括起来的这些标签里面就是从C层传过来的值(这些标签用法挺繁杂,是Django里面的知识,想知道更多,请查看Django文档相关章节)。{%%}标签执行语句,例如循环;{{}}就表示一个传过来的值。
最后一步,当你所有东西都调试好了之后,就可以把你的程序上传到google app engine上去了。在控制台下输入以下命令:
appcfg.py update myEngine
同样要求你先cd到myEngine文件夹的父目录里。这个命令敲下后,如果你是首次上传会要求你输入你的email地址跟密码。注意输密码的时候光标是没有任何反应的,不要以为你没有输入到密码,你尽管输,输好回车就是。如果上传成功会有提示。当然上传之前你要先在goole app engine上注册号帐号,并申请好应用程序名字(这个例子就是myEngine.appspot.com),当然如果myEngine这个名字被别人申请了,你就不能用了,要换一个没有人注册过的。另外要注意的是app.yaml里的application名字要跟这里的myEngine名字一样(app.yaml文件的application项的作用就是指定这一项嘛:-))