qrurls/views.py
author Tero Marttila <terom@fixme.fi>
Thu, 22 Aug 2013 02:00:03 +0300
changeset 54 0a2345d1450a
parent 51 6f35a169ef01
child 70 e8a8d490df2f
permissions -rw-r--r--
docdoc
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render
from django.utils import timezone

from qrurls.models import URL, URLItem

"""
    Public frontend UI.
"""

def _get_url_feed (shorturl=None, shorturl_id=None) :
    if shorturl :
        shorturl = shorturl.strip(' /')
        try :
            return URL.objects.get(shorturl=shorturl)
        except URL.DoesNotExist :
            raise Http404()
    elif shorturl_id :
        shorturl_id = int(shorturl_id.strip(' /'))
        try :
            return URL.objects.get(id=shorturl_id)
        except URL.DoesNotExist :
            raise Http404()
    else :
        raise Http404()

def index (request) :
    urls = URL.objects.all()
    return render(request, 'qrurls/index.html', dict(
        urls    = urls,
    ))

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()
    
    if not url_item :
        raise Http404()

    # redirect, either directly, or to image()
    url = url_item.get_absolute_url()

    return HttpResponseRedirect(url)
    
def item (request, shorturl, item_id) :
    url_feed = _get_url_feed(shorturl=shorturl)

    now = timezone.now()
    try :
        url_item = URLItem.objects.get(shorturl=url_feed, id=int(item_id), published__lt=now)
    except URLItem.DoesNotExist :
        raise Http404()
    
    if url_item.url :
        return 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(
            title   = title,
            image   = url_item.image,
        ))
    else :
        raise Http404()