一个 webapp 应用程序由三部分组成:
WSGIApplication 类可以实现 WSGI 接口,该接口是网络应用程序框架和网络服务器之间的标准接口。使用 WSGI CGI 适配器可让任何 WSGI 框架与 App Engine 配合使用。webapp 包含这样一个适配器:函数 run_wsgi_app() 使用应用程序实例并运行此实例。您也可以使用包含在 Python 标准库的 wsgiref 模块中的 CGI 适配器。
以下示例将四个网址路径映射到四个 RequestHandler 类(未显示),然后使用 run_wsgi_app() 运行该应用程序:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
application = webapp.WSGIApplication([('/', MainPage),
('/newentry', NewEntry),
('/editentry', EditEntry),
('/deleteentry', DeleteEntry),
],
debug=True)
def main():
run_wsgi_app(application)
WSGIApplication 构造函数使用将网址路径映射到 RequestHandler 类的对(元组)列表。
可选的 debug=True 参数可将应用程序设置为调试模式,这样可通知 webapp 在处理程序抛出异常时在浏览器中显示堆栈跟踪。默认情况下,当发生错误时,webapp 只返回一个 HTTP 500 错误。
映射中的网址路径是一个正则表达式。必须转义正则表达式特殊字符。正则表达式可以包含正则表达式分组以与网址部分相匹配。将分组中相匹配的模式作为参数传递至请求处理程序。
class BrowseHandler(webapp.RequestHandler):
def get(self, category, product_id):
# Display product with given ID in the given category.
# Map URLs like /browse/(category)/(product_id) to BrowseHandler.
application = webapp.WSGIApplication([(r'/browse/(.*)/(.*)', BrowseHandler)
],
debug=True)
def main():
run_wsgi_app(application)
提示:App Engine 基于在应用程序的 app.yaml 文件中所指定的网址和映射将请求传送至 Python 脚本。webapp WSGIApplication 会进一步将具体的网址路径映射至请求处理程序。如何使用这两种映射全由您决定:您可以将所有非静态网址映射至单个 Python 脚本,然后使该脚本将所有动态网址调度到处理程序。您也可以将功能分组成由不同脚本运行的多个 WSGI 应用程序,然后使用 app.yaml 将相应的网址映射至相应的应用程序。