The CGI standard is simple, but it would be cumbersome to write all of the code that uses it by hand. Web application frameworks handle these details for you, so you can focus your development efforts on your application’s features. Google App Engine supports any framework written in pure Python that speaks CGI (and any WSGI-compliant framework using a CGI adaptor).
webapp2 application has three parts:
RequestHandlerclasses that process requests and build responses.
WSGIApplicationinstance that routes incoming requests to handlers based on the URL.
WSGIApplicationusing a CGI adaptor.
Let’s rewrite our friendly greeting as a
webapp2 application. Edit
helloworld/helloworld.py and replace its contents with the following:
import webapp2 class MainPage(webapp2.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Hello, webapp2 World!') application = webapp2.WSGIApplication([ ('/', MainPage) ], debug=True)
app.yaml and replace its contents with the following:
application: helloworld version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: helloworld.app
This code defines one request handler,
MainPage, mapped to the root URL
webapp2 receives an HTTP GET request to the URL
MainPage class and calls the instance’s
Inside the method, information about the request is available using
self.request. Typically, the method sets properties on
to prepare the response, then exits.
webapp2 sends a response based on
the final state of the
The application itself is represented by a
instance. The parameter
debug=true passed to its constructor tells
webapp2 to print stack traces to the browser output if a handler
encounters an error or raises an uncaught exception. You may wish to remove
this option from the final version of your application.
application.run() runs the application in App Engine’s CGI
environment. It uses a function provided by App Engine that is similar to the
WSGI-to-CGI adaptor provided by the
wsgiref module in the Python standard
library, but includes a few additional features. For example, it can
automatically detect whether the application is running in the development
server or on App Engine, and display errors in the browser if it is running
on the development server.
We’ll use a few more features of
webapp2 later in this tutorial. For more
webapp2, see the webapp2 reference.