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