/
bucket.py
59 lines (44 loc) · 1.99 KB
/
bucket.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from google.appengine.api import memcache, users
from google.appengine.ext import db, webapp
from google.appengine.ext.webapp import template
from models import ListItem, UserListItems
import logging
import os
class BucketListHandler(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
template_content = self.render_list_items(user)
self.response.out.write(template_content)
def post(self):
user = users.get_current_user()
# We require a valid user
if not user:
self.redirect(users.create_login_url(self.request.uri))
list_item = ListItem()
list_item.author = user
list_item.title = self.request.get('title')
list_item.details = self.request.get('details')
# If we were able to save, get rid of the template cache
if list_item.put():
memcache_key = user.nickname() + '_list_items'
memcache.delete(memcache_key)
self.redirect('/view')
def render_list_items(self, user):
memcache_key = user.nickname() + '_list_items'
template_content = memcache.get(memcache_key)
if template_content is not None:
return template_content
query = UserListItems.gql('WHERE user = :user', user=user)
user_list_items = query.get()
# Use multi-get to pull all list items for this user
list_items = ListItem.get(user_list_items.list_items)
template_values = {
'user': user.nickname(),
'list_items': list_items,
'view_javascript': 'view'
}
path = os.path.join(os.path.dirname(__file__), 'view.html')
template_content = template.render(path, template_values)
if not memcache.add(memcache_key, template_content):
logging.error('Memcache: Could not set ' + memcache_key)
return template_content