对App Engine来讲最简单的Python应用是一个有两个文件的简单目录:一个称为app.yaml的配置文件,一个用于请求处理器的Python代码文件。包含app.yaml文件的这个目录就是这个应用的根目录。在使用工具时,你会经常用到这个目录。
※如果你使用Launcher,你可以通过选择File菜单New Application,来创建一个新项目。Launcher创建一个有一些文件的新项目,你可能会希望在这个例子中会编辑这些文件。可选择的是,你也可以手动创建这个项目目录和文件,然后通过单击File菜单,Add Existing Application,把这个项目追加到Launcher上。
创建一个叫做clock的目录来包含这个项目。使用你喜欢的文本编辑器,在这个目录中创建一个叫做app.yaml的文件,类似于例2-1。
例2-1:一个简单应用的配置文件,使用Python2.7运行环境
application:clock version:1 runtime:python27 api_version:1 threadsafe:true handlers: -url:.* script:main.application libraries: -name:webapp2 version:"2.5.1"
这个配置文件使用了一个叫做YAML的格式,一个用于配置文件和网络信息(network message)的开放格式。你没有必要知道超过在这儿看到的更多关于格式的内容。
在这个例子中,这个配置文件告诉App Engine一个叫做clock的应用的版本1,它使用了Python2.7运行时环境的版本1(api_version)。对于这个应用的每个请求(每个匹配正则表达式.*的URL,表示所有的URL)将会被定义在一个叫做main的Python模块的application变量中的应用对象(application object)处理。
※在Python2.5运行时环境中,URLs被映射到源文件的名字,作为CGI脚本执行。尽管在Python2.7中这还是被支持的,但是并发的请求(多线程)要求这个新方法,它会参照(refer to the WSGI instance global variable in the app.yaml configuration)在app.yaml配置中的WSGI实例全局变量。
在app.yaml相同的目录下,创建一个叫做main.py的文件,类似例2-2。
例2-2.一个简单的Python网络应用,使用webapp2框架
import datatime import webapp2 class MainPage(webapp2.RequestHandler): def get(self) message = '<p>The time is:%s</p>' % datetime.datetime.now() self.response.out.write(message) application = webapp2.WSGIApplication([('/',MainPage)],debug = True)
这个简单的Python网络应用使用了App Engine自带的一个叫做webapp2的网络应用框架。这个框架符合Python的网络应用框架的通用标准,也就是Web Server Gateway Interface(WSGI)。你不需要知道很多WGSI,除了它是一个Python标准,有许多有用的框架可供选择,使用各种适配器(比如WSGI-to-CGI适配器)很容易将WSGI应用port到其他的应用管理环境(application hosting environment)。webapp2是WSGI框架的一个简单例子。Django是另一个例子,它是一个有名的开源Python网络应用框架,也包含在App Engine中。