使用模板
HTML里面嵌入在编程代码里是非常杂乱的,所以我们最好使用一个独立的文件来专门处理HTML代码,以便于将界面显示和数据获取的过程相互独立出来。有很多使用Python实现的模板系统,比如: EZT, Cheetah,ClearSilver, Quixote, Django 等等.你可以选择这里面的任意一个。
为了大家方便, webapp 模块默认包含了Django的模板系统.Django模板是Google App Engine的一部分,所以你不需要单独进行绑定就可以直接使用。
使用 Django 模板
首先在 helloworld/helloworld.py中引入template模块:
import os
from google.appengine.ext.webapp import template
重新编写 MainPage handler:
class MainPage(webapp.RequestHandler):
def get(self):
greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(10)
if users.get_current_user():
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
最后, 在 helloworld 的目录下面创建一个新文件index.html, 内容如下:
<html> <body> {% for greeting in greetings %} {% if greeting.author %} <b>{{ greeting.author.nickname }}</b> wrote: {% else %} An anonymous person wrote: {% endif %} <blockquote>{{ greeting.content|escape }}</blockquote> {% endfor %} <form action="/sign" method="post"> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Sign Guestbook"></div> </form> <a href="{{ url }}">{{ url_linktext }}</a> </body></html>
刷新浏览器,然后查看网页上的变化。
template.render(path, template_values) 接受输入一个文件路径和一个dictionary类型的数据字典,并输出一段经过处理的文本。这个模板使用了Django模板的语法.在模板文件中可以直接使用引入的值,并且可以使用这些对象的属性。在许多实际例子里,你可以直接使用GAE数据模型,并访问他们的属性。
提示: App Engine 应用程序对所有上传的文件的访问权限都是只读的,所以对文件的写操作是被禁止的;当前工作路径是应用程序的根目录,所以 index.html 的路径可以简单写成"index.html"。
想要了解更多关于Django模板引擎的内容,参见 the Django 0.96 template documentation。
使用静态文件
和其他的web发布环境不同,Google App Engine 不支持直接将应用目录下的文件直接输出的功能。也就是说,如果我们将模板文件取名为 index.html, 我们并不能直接通过URL /index.html来访问这个文件。但是现在有非常多的应用需要我们提供文件直接输出的功能,例如图片,CSS,JavaScript等等,这些类型的文件都需要直接输出到客户端。GAE提供了这样的功能,你不需要编写自己的处理模块来进行额外的处理。
使用静态文件
编辑helloworld/app.yaml 修改里面的代码:
application: helloworldversion: 1runtime: pythonapi_version: 1handlers:- url: /stylesheets static_dir: stylesheets- url: /.* script: helloworld.py
新加的handlers 部分定义了两个URL处理模块,其中 /stylesheets开头的所有URL都定义并转向了静态文件夹stylesheets ,如果在这个文件夹中发现了请求的文件,就会直接把这个文件的内容返回给客户端;而其他请求都会由helloworld.py 脚本进行处理。
默认情况下,App Engine 按照文件名后缀处理静态文件,如 .css 结尾的文件就会使用MIME类型text/css。
GAE按照在 app.yaml定义的顺序对URL进行处理。在这个例子里 /stylesheets 将先于 /.* 对路径进行处理。
想要了解更多在 app.yaml中的选项,请查看 the app.yaml reference。
下面,我们创建 helloworld/stylesheets目录,并且在这个目录下创建一个新文件 main.css :
body { font-family: Verdana, Helvetica, sans-serif; background-color: #DDDDDD;}
最后,编辑 helloworld/index.html 插入如下几行:
<head> <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" /> </head>
刷新并查看效果,新版本的程序使用了样式表。
上传你的程序
用户创建和管理GAE应用程序,都需要使用GAE控制台程序来进行。其中,用于上传的命令行工具叫做appcfg.py。
注意: 到目前为止,还没有办法删除已经发布的应用。这个功能会在稍后提供。在现在的预览测试阶段,每个用户可以注册3个应用程序ID,如果你不想使用你自己的应用程序ID,你可以仅仅读一下这一章,到你真正想发布自己的应用的时候再尝试。
注册应用程序
访问http://appengine.google.com/,使用你的Google帐号登录到App Engine管理平台。(如果你还没有Google帐号,请先申请一个)。
为了创建一个新的GAE应用,请点击按钮 "Create an Application" ,按照提示注册应用程序ID,应用程序ID的名字必须是唯一的。创建ID后,你就可以拥有一个http://application-id.appspot.com/这样的URL地址来访问你的WEB应用了.当然,如果你拥有自己的域名的话,也可以将其绑定到你自己的应用。
修改 app.yaml , 吧 application: 的值设置为你刚刚申请的应用程序ID。
上传你的Application
上传你的程序,使用下面的命令:
appcfg.py update helloworld/
按照提示,输入您自己的Google 用户名和密码。
现在你已经可以使用如下地址访问您刚刚上传的WEB应用了:
http://application-id.appspot.com
恭喜你!
你已经完成了这个教程的学习了.想要了解关于Google App Engine的更多相关内容,您可以继续查看the App Engine documentation。