6 from google
.appengine
.api
import users
7 from google
.appengine
.ext
import webapp
8 from google
.appengine
.ext
.webapp
.util
import run_wsgi_app
9 from google
.appengine
.ext
import db
10 from google
.appengine
.ext
.webapp
import template
11 from google
.appengine
.api
import memcache
13 MEMCACHE_GREETINGS
= 'greetings'
15 class Greeting(db
.Model
):
16 author
= db
.UserProperty()
17 content
= db
.StringProperty(multiline
=True)
18 date
= db
.DateTimeProperty(auto_now_add
=True)
20 class MainPage(webapp
.RequestHandler
):
22 logging
.debug("In MainPage handler");
23 greetingsString
= memcache
.get(MEMCACHE_GREETINGS
)
24 if greetingsString
is not None:
25 logging
.info("Retrieved greetings from memcache")
26 greetings
= pickle
.loads(greetingsString
)
28 logging
.info("No greetings in memcache, re-querying datastore")
29 greetings_query
= Greeting
.all().order('-date')
30 greetings
= greetings_query
.fetch(10)
31 if not memcache
.set(MEMCACHE_GREETINGS
, pickle
.dumps(greetings
)):
32 logging
.error("Memcache set failed.")
34 if users
.get_current_user():
35 url
= users
.create_logout_url(self
.request
.uri
)
36 url_linktext
= 'Logout'
38 url
= users
.create_login_url(self
.request
.uri
)
39 url_linktext
= 'Login'
42 'greetings': greetings
,
44 'url_linktext': url_linktext
,
47 path
= os
.path
.join(os
.path
.dirname(__file__
), 'index.html')
48 self
.response
.out
.write(template
.render(path
, template_values
))
51 class Guestbook(webapp
.RequestHandler
):
55 if users
.get_current_user():
56 greeting
.author
= users
.get_current_user()
58 greeting
.content
= self
.request
.get('content')
60 memcache
.delete(MEMCACHE_GREETINGS
)
63 application
= webapp
.WSGIApplication(
65 ('/sign', Guestbook
)],
69 run_wsgi_app(application
)
71 if __name__
== "__main__":