--- a/qrurls/models.py Mon Sep 02 02:50:16 2013 +0300
+++ b/qrurls/models.py Mon Sep 02 03:20:10 2013 +0300
@@ -212,6 +212,10 @@
else :
return "({age})".format(age=age)
+ def last_modified (self) :
+ # XXX: this asumes that URLImage is never changed after publishing..
+ return self.published
+
def __unicode__ (self) :
return u"{published_state} {url}".format(
published_state=self.published_state(),
--- a/qrurls/views.py Mon Sep 02 02:50:16 2013 +0300
+++ b/qrurls/views.py Mon Sep 02 03:20:10 2013 +0300
@@ -1,9 +1,11 @@
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render
-from django.utils import timezone
+from django.utils import timezone, http
from qrurls.models import URL, URLItem
+import calendar # timegm
+
"""
Public frontend UI.
"""
@@ -14,6 +16,9 @@
class URLItemNotFound (Http404):
pass
+def http_datetime (dt) :
+ return http.http_date(calendar.timegm(dt.utctimetuple()))
+
def _get_url_item (shorturl=None, shorturl_id=None, item_id=None, related=()) :
# JOIN against shorturl, urlimage
url_item = URLItem.objects.select_related(*related)
@@ -53,7 +58,11 @@
url_item = _get_url_item(**opts)
# redirect, either directly, or to image()
- return HttpResponseRedirect(url_item.get_absolute_url())
+ response = HttpResponseRedirect(url_item.get_absolute_url())
+
+ # set cache
+ response['Last-Modified'] = http_datetime(url_item.last_modified())
+ return response
def item (request, **opts) :
"""
@@ -63,13 +72,18 @@
url_item = _get_url_item(related=('shorturl', 'image',), **opts)
if url_item.url :
- return HttpResponseRedirect(url_item.url)
+ response = HttpResponseRedirect(url_item.url)
elif url_item.image :
title = url_item.image.title or url_item.shorturl.title
- return render(request, 'qrurls/image.html', dict(
+ response = render(request, 'qrurls/image.html', dict(
title = title,
image = url_item.image,
))
else :
raise Http404()
+
+ # set cache
+ response['Last-Modified'] = http_datetime(url_item.last_modified())
+ return response
+