`
ruilin215
  • 浏览: 1148197 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Google App Engine 学习和实践

阅读更多

这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧。不当之处,请多多指正。

作者:liigo,2009/04/26夜,大连

原创链接:http://blog.csdn.net/liigo/archive/2009/04/26/4127055.aspx

转载请注明出处:http://blog.csdn.net/liigo

一,怎么想起来玩Google App Engine了呢?

最近想写一个小程序,以便在公司的电脑和家里的电脑之间随时共享数据。可是没有现成的服务器和虚拟主机,数据存在哪里就成了问题。为了这个小东西去专门租一个虚拟主机吗,似乎不值得。而Google App Engine (GAE)允许用户在GOOGLE的服务器上免费部署WEB应用程序,自然而然的满足了我的需求。

二,什么是Google App Engine?

严格的定义去官方网站(http://code.google.com/intl/en/appengine/)找吧,我(liigo)通俗的理解为,它是一个类似虚拟主机的东西,允许你把写好的WEB应用程序(WEB站点),部署在它的服务器上。举个例子吧,现在网络上到处都有提供“PHP + MySQL”和“ASP + SQLServer”虚拟主机服务的吧,一般每年收费从几百元到成千上万元的都有;而Google App Engine则相当于给你免费提供“Python + Datastore”和“Java Servlet/JSP + Datastore”虚拟主机服务(Datastore是GOOGLE提供的数据库,The App Engine datastore is a schemaless object datastore, with a query engine and atomic transactions.)。我们的程序跑在GOOGLE的服务器上,使用GOOGLE的CPU和带宽,享受GOOGLE优秀网络架构下的安全性、灵活性、可伸缩性和负载均衡。Google App Engine为每个程序免费提供500M存储空间,充足的CPU(每日最高46CPU-hours)和带宽(每日最高上传下载流量各10G),以及每月500万点击量,足够应付大多数项目需求(必要时还可以付费扩展);而提供等值性能的普通虚拟主机,则价格不菲。目前Google App Engine只支持Python和Java,计划中将支持其它编程语言(PHP, Ruby, Perl, ASP, ESP?)。我(liigo)个人以为,Google App Engine前途不可限量,将逐步蚕食目前的虚拟主机(virtual hosts)市场。目前它的劣势是,只支持Python和Java,而这两者显然不是WEB开发的首选。

三,Python,还是Java?

Google App Engine目前只支持Python和Java,这是个二选一的问题。从对编程语言的了解上,我应该选Java,但是考虑到开发的快速和便捷,我最终还是选择了我不怎么熟悉(甚至一度排斥)的Python。拿Java写WEB,就象拿易语言写服务器一样,未必是最好的选择。

四,Google App Engine之旅

照着入门教程一步步的来,刚开始进展顺利,很快就成功的部署了第一个程序,开心啊。

四.1 app.yaml *.py 等文件都可以即时修改即时生效,不用重启WEB服务器,很好。

四.2 库路径,好累啊。在接触到WebApp(以及后来的webob, cgi)时卡住了,报告“ImportError”错误,似乎是找不到相应的Python库(哈哈,我还以为只有易语言会提示“无法加载支持库”呢),搜索了半天,总算通过设置系统环境变量PYTHONPATH解决了,其值为:

我以为这是Google App Engine Python SDK安装包的疏忽,没有正确的设置相关库路径,害初学者们卡壳了半天。要说Java的classpath初学者难以理解,Python的PYTHONPATH, sys.path也好不哪里去,还别说,EF不是照样引入了EF_LIB_PATHS嘛。说多了。

四.3 不能在类定义之前使用它。WebApp最核心的一句代码:

我特意试了一下,把类MainPage的定义移到这一行下面,天啊,出来满屏的错误,吓得我又改回去了。可见虽然是脚本语言,也不能随着性子来。但是我真的希望把这一行写在源文件的最前面,因为这里集中了整个程序的结构。

四.4 URL中的字母是区分大小写的。例如:http://localhost:8080/index 写成 .../Index 就不行了,这一点不太好,应该改正。

四.5 Python格式化文本的语法,又卡住我半天。例程里有这么一句 write("%s" % a),我想再加一个"%s",尝试了各种语法,write("%s%s" % a % b),write("%s%s", a,b) 等等,深受折磨,偏偏Google也来折磨我,不允许我搜索"python %s"关键字,后来通过搜索"python format string"才找到正确答案:write("%s%s" %(a,b))。呵呵,探索的快乐。

四.6 文本转整数,用 int() 函数。根据某个id删除一个贴子,首先得到的是id的文本形式(self.request.get('id')),要先转成整数后再去数据库查找对应的记录(db.Model.get_by_id())。对python语言不熟啊,要搜索半天才找到int()这个函数。C/C++的话,我知道用atoi();Java的话,我知道用Integer.parseInt();Delphi的话,我知道用strtoint();易语言的话,我知道用"到整数()";EF的话,我知道用"文本类.到整数()";但是python的话,我要搜索半天才能找到int()。

四.7 Google的数据库Datastore。它不是传统的关系型数据库,而是对象型数据库;它不支持标准的SQL,但有类似的GQL。在python里使用的话:要先定义一个继承自db.Model的类(MyModel),指定各成员属性,相当于定义表结构(字段及其类型)吧;查询时,通过 db.GqlQuery() 构造一个GqlQuery对象(可当作MyModel对象的集合使用,如 for... in,GQL中"select from xxx"里的"xxx",就是MyModel类的类名称"MyModel"),或通过调用类方法MyModel.gql()返回GqlQuery对象(此时GQL中不需要"select from xxx"部分了);插入时,先实例化出一个MyModel对象,对其各成员赋值,然后调用该对象的put();修改时,对MyModel对象指定成员赋值,再调用put();删除时,调用MyModel类静态方法get_by_id()或get_by_key_name(),返回一个MyModel对象,调用该对象的delete()即可。

四.8Django的HTML模板。示例中有 {% if a %}的写法,我照猫画虎,写出来的 {% if a = b %} 被报告有语法错误,查了django模板文档才知道要写成 {% ifequal a b %},不直观啊,害我猜错了。另外,感觉这个模板系统思路有问题,HTML中充斥着{%%},一塌糊涂,既不成HTML也不成Python,生产力不高(但总比在Python代码中到处嵌HTML好一些);应该借鉴Tapestry的模板思路,对HTML有最小的侵入性,让标准的HTML编辑工具(DreamWeaver)仍然可以正常工作,否则美工MM是不喜欢参予你的项目的,她很难跟你合作。Tapestry的模板系统,是我接触到的最好的思路正确的模板系统,将来易语言的ESP(Easy Server Pages)也许会引入类似的模板。

四.9 把输出编码设定为UTF-8,就可以很自然地显示中文了:handler.response.headers['Content-Type'] = 'text/html; charset=utf-8'

五,学习和实践的成果

这两天的成果是:走完了入门教程的整个流程,形成站点http://liigotemp.appspot.com/;写了一个简单的小程序,形成站点http://liigoshared.appspot.com/(暂时没有编辑功能)。

分享到:
评论

相关推荐

    云端代码Google App Engine编程指南 高清带书签

    4. 访问控制和安全机制:Google App Engine提供了内置的安全机制,如身份验证、授权以及防火墙等,以保证应用和数据的安全。 5. 分发和负载均衡:在多个服务器之间分发用户请求是GAE自动处理的,它还可以根据流量的...

    Google App Engine Documentation

    在“google-appengine-docs-20081003”这个压缩包中,可能包含了早期版本(2008年10月3日)的Google App Engine开发指南、API参考、最佳实践和示例代码等内容。这些文档帮助开发者了解如何利用Google App Engine构建...

    Google App Engine文档

    **Google App Engine**是Google提供的一种云计算平台,用于构建和托管Web应用程序。它允许开发者使用Python、Java、Go或...开发者还需要熟悉所选编程语言的App Engine SDK和最佳实践,以便高效地构建和维护云原生应用。

    Using Google App Engine

    ### 使用Google App Engine:深入解析与实践 #### 核心知识点概述 Google App Engine(GAE)是Google推出的一款用于构建和托管Web应用的平台服务,它为开发者提供了丰富的工具和资源,使得开发者能够轻松地在...

    google app engine开发人员文档

    Google App Engine(GAE)是谷歌提供的一种云计算平台,它允许开发者构建并托管Web应用程序,无需管理和维护服务器硬件。这个平台支持多种编程语言,包括Python、Java、Go和PHP,为开发者提供了强大的服务,如数据...

    Programming Google App Engine, 2nd Edition

    12. **最佳实践**:书中还会分享开发Google App Engine应用的最佳实践和经验教训,帮助开发者避免常见的陷阱。 《Programming Google App Engine, 2nd Edition》不仅适合初学者,也适合有经验的开发者,它提供了一...

    Begin Java Google APP Engine

    总的来说,《 Beginning Java™ Google App Engine》是一本全面的入门教程,涵盖了从基础概念到高级实践的各个层面。通过本书,读者将掌握在Google App Engine上构建和管理Java应用所需的知识和技能,为在云端开发...

    google_appengine_1.9.38

    标题 "google_appengine_1.9.38" 指的是 Google App Engine 的一个特定版本,1.9.38,这个版本可能包含了该时期 App Engine 的稳定特性和更新。 描述中提到的 "WebRTC 房间服务器" 是指使用 WebRTC(Web Real-Time ...

    Using Google App Engine.2009.pdf

    Google App Engine是一个由谷歌提供的云服务平台,它允许开发者在谷歌的基础架构上构建和部署应用程序。 #### 什么是Google App Engine? Google App Engine是一种完全托管的开发和部署平台,允许开发者构建可扩展...

    云端代码:利用Google AppEngine编程

    通过本书的学习,读者将能够掌握Google AppEngine的核心技术和最佳实践,并能够在实际项目中运用这些知识,构建出高效稳定的云应用程序。 总之,《云端代码:利用Google AppEngine编程》是一本值得推荐的书籍,无论...

    云端代码Google App Engine编程指南

    Java应用的配置文件是`appengine-web.xml`,用于定义应用属性和服务。 **三、Google App Engine的关键特性** 1. **数据存储:Cloud Datastore** App Engine的NoSQL数据库,提供强一致性读取和最终一致性写入。...

    Programming Google App Engine

    此外,书中还会介绍如何使用Google App Engine的灵活环境,它支持更多的编程语言,如Python 3和Node.js,提供了更大的灵活性和对底层系统的更多控制。 最后,书中的实战案例和最佳实践将帮助读者将理论知识转化为...

    google app engine 一些文档 python

    Google App Engine(GAE)是Google提供的一项托管服务,它允许开发者使用Python、Java、Go或PHP等语言构建和运行Web应用程序。这个压缩包中包含的文档无疑将为学习和理解GAE提供宝贵资料,无论是中文还是英文,都将...

Global site tag (gtag.js) - Google Analytics