CGI标准是很简单的,但是要把所有的代码一一写出来还是很繁重的。WEB app框架帮你解决了这些具体问题,这样你就可以将你的精力集中在你的程序的功能上了。Google App Engine支持所有用Python写的关于CGI的网站框架(包括使用CGI adaptor的 WSGI-compliant框架),包括 Django,CherryPy, Pylons, 以及 web.py.。你只需要吧这个框架的代码复制到你的程序目录下就可以使用这个框架了。
App Engine包括了一个很简单的web应用框架,叫做webapp。这个webapp框架已经在App Engine开发环境和SDK中安装好了,所以你不需要添加任何代码到你的程序中去,就可以使用这个框架了。在下面的教程中我们将使用webapp框架。
Hello, webapp!
一个 webapp 程序包含三个部分:
- 一个或多个
RequestHandler类用来处理请求和产生响应。
- 一个
WSGIApplication 实例用来根据发送请求的URL对应到相应的类
- 一个主程序用来运行
WSGIApplication(使用CGI adaptor)
下面让我们来把我们的欢迎辞改写成一个 webapp 程序. 编辑 helloworld/helloworld.py 文件,替换为下面的代码:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
在你的浏览器中重新加载 http://localhost:8080/ ,你将会看到改变。 (如果你关闭了web server,那么可以重新打开,方法详见 "Hello, World!".)
webapp做了些什么呢?
这个 webapp 模块是在 google.appengine.ext 包里面的。这个模块由SDK提供,在发布版的运行环境中也会包括。
上面这段代码定义了一个request handler,MainPage,映射到根目录URL(/)。当webapp接收到一个来自URL/ 的HTTP GET请求后,它就会初始化MainPage类,然后调用这个实例的get方法。在这个方法里面,关于请求的信息可以通过self.request来获得。通常,这个方法都会设置 self.response的属性以进行响应,然后退出方法。webapp将会根据MainPage实例的生命期最后的状态发送出响应。
应用程序本身由一个 webapp.WSGIApplication 实例所代表。 参数 debug=true 将会传递给生产函数,告诉 webapp 如果在程序运行过程中遇到错误,输出堆栈调用的记录。对于产品版的程序,你可能会去掉这个参数。
函数 run_wsgi_app() 接收 WSGIApplication 实例 (或者其他 WSGI-compatible 程序对象),然后将这个程序在App Engine's CGI environment里运行。 run_wsgi_app()和 Python标准库里提供的wsgiref模块中的WSGI-to-CGI adaptor ,但提供了一些额外的功能。比如,它可以自动检测程序是否是运行在调试环境,并且可以在调试环境中输出错误。
我们将会在下面的入门指南中使用很多webapp的功能,想要了解更多关于webapp的内容,访问:the webapp reference。
上一页 下一页