optimize shorturl() to use a single SELECT JOIN query
authorTero Marttila <terom@fixme.fi>
Mon, 02 Sep 2013 02:31:55 +0300
changeset 70 e8a8d490df2f
parent 69 f7db1b752763
child 71 04f4f312d4ad
optimize shorturl() to use a single SELECT JOIN query
qrurls/views.py
--- a/qrurls/views.py	Mon Sep 02 02:21:42 2013 +0300
+++ b/qrurls/views.py	Mon Sep 02 02:31:55 2013 +0300
@@ -31,18 +31,33 @@
     ))
 
 def shorturl (request, shorturl=None, shorturl_id=None) :
-    url_feed = _get_url_feed(shorturl=shorturl, shorturl_id=shorturl_id)
-
-    # most recent
-    url_item = url_feed.active_item()
+    """
+        Primary frontend for redirecting based on current time.
+    """
     
-    if not url_item :
+    # JOIN against shorturl
+    url_item = URLItem.objects.select_related()
+    
+    if shorturl:
+        shorturl = shorturl.strip(' /')
+        url_item = url_item.filter(shorturl__shorturl=shorturl)
+    elif shorturl_id:
+        shorturl_id = int(shorturl_id.strip(' /'))
+        url_item = url_item.filter(shorturl__id=shorturl_id)
+    else:
+        raise Http404()
+    
+    # match for most recent item
+    now = timezone.now()
+    url_item = url_item.filter(published__lt=now).order_by('-published')
+    
+    try:
+        url_item = url_item[0]
+    except IndexError:
         raise Http404()
 
     # redirect, either directly, or to image()
-    url = url_item.get_absolute_url()
-
-    return HttpResponseRedirect(url)
+    return HttpResponseRedirect(url_item.get_absolute_url())
     
 def item (request, shorturl, item_id) :
     url_feed = _get_url_feed(shorturl=shorturl)