import calendar # timegm
import logging
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render
from django.utils import timezone, http
from qrurls.models import URL, URLItem
log = logging.getLogger('qrurls.views')
"""
Public frontend UI.
"""
def http_datetime (dt) :
return http.http_date(calendar.timegm(dt.utctimetuple()))
def index (request) :
urls = URL.objects.all()
return render(request, 'qrurls/index.html', dict(
urls = urls,
))
def shorturl (request, shorturl=None) :
"""
Primary frontend for redirecting based on current time.
"""
try:
url, modified = URLItem.get_url(shorturl)
except URLItem.DoesNotExist:
raise Http404()
# redirect, either directly, or to image()
response = HttpResponseRedirect(url)
response['Vary'] = ''
response['Last-Modified'] = http_datetime(modified)
return response
def item (request, shorturl, item_id) :
"""
Frontend for a specific item.
"""
try :
url_item = URLItem.get_item(shorturl, item_id=item_id,
related=('shorturl', 'image'),
)
except URLItem.DoesNotExist:
raise Http404()
if url_item.url :
response = HttpResponseRedirect(url_item.url)
elif url_item.image :
response = render(request, 'qrurls/image.html', dict(
title = url_item.title(),
image = url_item.image,
))
else :
raise Http404()
# set cache
response['Vary'] = ''
response['Last-Modified'] = http_datetime(url_item.last_modified())
return response