Skip to content

Commit 319eb25

Browse files
committed
Instead of caching homepage generally, cache data from Meetup with Django cache framework low-level api
1 parent 2a11abb commit 319eb25

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

pythonkc_site/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
urlpatterns = patterns('',
1616

1717
url(r'^/?$', cache_page(60*60*24)(PythonKCComingSoon.as_view())),
18-
url(r'^demo/?$', cache_page(60 * 5)(PythonKCHome.as_view()), name='home'),
18+
url(r'^demo/?$', PythonKCHome.as_view(), name='home'),
1919

2020
# Examples:
2121
# url(r'^$', 'pythonkc_site.views.home', name='home'),

pythonkc_site/views.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33

44
from django.conf import settings
5+
from django.core.cache import cache
56
from django.core.exceptions import ImproperlyConfigured
67
from django.core.urlresolvers import reverse
78
from django.views.generic import FormView
89
from django.views.generic.base import TemplateView
10+
from functools import wraps
911
from pythonkc_meetups import PythonKCMeetups
1012
from pythonkc_site.forms import ContactForm
13+
import logging
14+
15+
16+
logger = logging.getLogger(__name__)
1117

1218

1319
try:
@@ -33,15 +39,16 @@ def form_valid(self, form):
3339
return super(PythonKCHome, self).form_valid(form)
3440

3541
def get_context_data(self, **kwargs):
36-
# NOTE Instead of individually caching next/past events, we're
37-
# simply going to cache this whole page until things get more
38-
# complicated (see urls.py for caching decoration).
3942

43+
@memoize_in_cache('next_event', 60 * 5)
4044
def get_next_event():
45+
logging.info('Retrieving next event from Meetup.com')
4146
upcoming_events = meetups.get_upcoming_events()
4247
return upcoming_events[0] if upcoming_events else None
4348

49+
@memoize_in_cache('past_events', 60 * 60)
4450
def get_past_events():
51+
logging.info('Retrieving past events from Meetup.com')
4552
return meetups.get_past_events()[:num_past_events]
4653

4754
return {
@@ -51,5 +58,19 @@ def get_past_events():
5158
}
5259

5360

61+
def memoize_in_cache(cache_key, cache_timeout_seconds=None):
62+
"""Cache the result of a no-args function."""
63+
def decorator(func):
64+
@wraps(func)
65+
def decorated():
66+
value = cache.get(cache_key)
67+
if not value:
68+
value = func()
69+
cache.set(cache_key, value, cache_timeout_seconds)
70+
return value
71+
return decorated
72+
return decorator
73+
74+
5475
class PythonKCComingSoon(TemplateView):
5576
template_name = 'coming_soon.html'

0 commit comments

Comments
 (0)