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()