- Use guestbook entity group for consistency in High Replication datastore
[gae-samples.git] / python27 / guestbook / guestbook.py
blob9a8e219c4eadd218fbebba4ba19d4a24f6825fd9
1 import jinja2
2 import os
3 import webapp2
5 from google.appengine.api import users
6 from google.appengine.ext import ndb
9 # We set a parent key on the 'Greetings' to ensure that they are all in the same
10 # entity group. Queries across the single entity group will be consistent.
11 # However, the write rate should be limited to ~1/second.
13 def guestbook_key(guestbook_name='default_guestbook'):
14 return ndb.Key('Guestbook', guestbook_name)
16 jinja_environment = jinja2.Environment(
17 loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
18 extensions=['jinja2.ext.autoescape'])
20 class Greeting(ndb.Model):
21 author = ndb.UserProperty()
22 content = ndb.StringProperty()
23 date = ndb.DateTimeProperty(auto_now_add=True)
25 class MainPage(webapp2.RequestHandler):
26 def get(self):
27 greetings_query = Greeting.query(ancestor=guestbook_key()).order(-Greeting.date)
28 greetings = greetings_query.fetch(10)
30 if users.get_current_user():
31 url = users.create_logout_url(self.request.uri)
32 url_linktext = 'Logout'
33 else:
34 url = users.create_login_url(self.request.uri)
35 url_linktext = 'Login'
37 template = jinja_environment.get_template('index.html')
38 self.response.out.write(template.render(greetings=greetings,
39 url=url,
40 url_linktext=url_linktext))
42 class Guestbook(webapp2.RequestHandler):
43 def post(self):
44 greeting = Greeting(parent=guestbook_key())
46 if users.get_current_user():
47 greeting.author = users.get_current_user()
49 greeting.content = self.request.get('content')
50 greeting.put()
51 self.redirect('/')
53 application = webapp2.WSGIApplication(
54 [('/', MainPage),
55 ('/sign', Guestbook)],
56 debug=True)