import cgi
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write('<html><body>')
greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")
for greeting in greetings:
if greeting.author:
self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
else:
self.response.out.write('An anonymous person wrote:')
self.response.out.write('<blockquote>%s</blockquote>' %
cgi.escape(greeting.content))
# Write the submission form and the footer of the page
self.response.out.write("""
<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(webapp.RequestHandler):
def post(self):
greeting = Greeting()
if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
I am new to Python and a bit confused looking at this Google App Engine tutorial code. In the Greeting class, content = db.StringProperty(multiline=True), but in the Guestbook class, "content" in the greeting object is then set to greeting.content = self.request.get('content').
I don't understand how the "content" variable is being set in the Greeting class as well as the Guestbook class, yet seemingly hold the value and properties of both statements.
Best Answer
The first piece of code is a model definition:
It says that there is a model
Greeting
that has aStringProperty
with the namecontent
.In the second piece of code, you create an instance of the
Greeting
model and assign a value to itscontent
propertyedit: to answer your question in the comment: this is basic object oriented programming (or OOP) with a little bit of Python's special sauce (descriptors and metaclasses). If you're new to OOP, read this article to get a little bit more familiar with the concept (this is a complex subject, there are whole libraries on OOP, so don't except to understand everything after reading one article). You don't really have to know descriptors or metaclasses, but it can come in handy sometimes. Here's a good introduction to descriptors.