If we want users to be able to post their own greetings, we need a way to
process information submitted by the user with a web form. The
framework makes processing form data easy.
Replace the contents of
helloworld/helloworld.py with the following:
import cgi from google.appengine.api import users import webapp2 class MainPage(webapp2.RequestHandler): def get(self): self.response.out.write(""" <html> <body> <form action="/sign" method="post"> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Sign Guestbook"></div> </form> </body> </html>""") class Guestbook(webapp2.RequestHandler): def post(self): self.response.out.write('<html><body>You wrote:<pre>') self.response.out.write(cgi.escape(self.request.get('content'))) self.response.out.write('</pre></body></html>') application = webapp2.WSGIApplication([ ('/', MainPage), ('/sign', Guestbook) ], debug=True) def main(): application.run() if __name__ == "__main__": main()
Reload the page to see the form, then try submitting a message.
This version has two handlers:
MainPage, mapped to the URL
a web form.
Guestbook, mapped to the URL
/sign, displays the data
submitted by the web form.
Guestbook handler has a
post() method instead of a
method. This is because the form displayed by
MainPage uses the HTTP POST
method="post") to submit the form data. If for some reason you
need a single handler to handle both GET and POST actions to the same URL, you
can define a method for each action in the same class.
The code for the
post() method gets the form data from
Before displaying it back to the user, it uses
cgi.escape() to escape
HTML special characters to their character entity equivalents.
cgi is a
module in the standard Python library; see the documentation for cgi
for more information.
The App Engine environment includes the entire Python 2.5 standard library. However, not all actions are allowed. App Engine applications run in a restricted environment that allows App Engine to scale them safely. For example, low-level calls to the operating system, networking operations, and some filesystem operations are not allowed, and will raise an error when attempted. For more information, see The Python Runtime Environment.
Now that we can collect information from the user, we need a place to put it and a way to get it back.
Continue to Using the Datastore.