qrurls/views.py
author Tero Marttila <terom@fixme.fi>
Mon, 02 Sep 2013 02:31:55 +0300
changeset 70 e8a8d490df2f
parent 54 0a2345d1450a
child 71 04f4f312d4ad
permissions -rw-r--r--
optimize shorturl() to use a single SELECT JOIN query
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
     1
from django.http import HttpResponse, HttpResponseRedirect, Http404
12
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
     2
from django.shortcuts import render
42
e4f6ea904257 qrurls item view: only show published items
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
     3
from django.utils import timezone
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
     4
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
     5
from qrurls.models import URL, URLItem
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
     6
54
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
     7
"""
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
     8
    Public frontend UI.
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
     9
"""
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    10
33
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    11
def _get_url_feed (shorturl=None, shorturl_id=None) :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    12
    if shorturl :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    13
        shorturl = shorturl.strip(' /')
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    14
        try :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    15
            return URL.objects.get(shorturl=shorturl)
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    16
        except URL.DoesNotExist :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    17
            raise Http404()
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    18
    elif shorturl_id :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    19
        shorturl_id = int(shorturl_id.strip(' /'))
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    20
        try :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    21
            return URL.objects.get(id=shorturl_id)
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    22
        except URL.DoesNotExist :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    23
            raise Http404()
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    24
    else :
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    25
        raise Http404()
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    26
12
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    27
def index (request) :
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    28
    urls = URL.objects.all()
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    29
    return render(request, 'qrurls/index.html', dict(
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    30
        urls    = urls,
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    31
    ))
7605af83cb14 add qrurls index
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    32
19
0742539e94c3 shorter urls
Tero Marttila <terom@paivola.fi>
parents: 16
diff changeset
    33
def shorturl (request, shorturl=None, shorturl_id=None) :
70
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    34
    """
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    35
        Primary frontend for redirecting based on current time.
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    36
    """
16
523b3e9eddfa fixbug modelget item upcoming
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    37
    
70
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    38
    # JOIN against shorturl
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    39
    url_item = URLItem.objects.select_related()
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    40
    
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    41
    if shorturl:
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    42
        shorturl = shorturl.strip(' /')
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    43
        url_item = url_item.filter(shorturl__shorturl=shorturl)
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    44
    elif shorturl_id:
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    45
        shorturl_id = int(shorturl_id.strip(' /'))
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    46
        url_item = url_item.filter(shorturl__id=shorturl_id)
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    47
    else:
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    48
        raise Http404()
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    49
    
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    50
    # match for most recent item
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    51
    now = timezone.now()
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    52
    url_item = url_item.filter(published__lt=now).order_by('-published')
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    53
    
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    54
    try:
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    55
        url_item = url_item[0]
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    56
    except IndexError:
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    57
        raise Http404()
33
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    58
40
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 37
diff changeset
    59
    # redirect, either directly, or to image()
70
e8a8d490df2f optimize shorturl() to use a single SELECT JOIN query
Tero Marttila <terom@fixme.fi>
parents: 54
diff changeset
    60
    return HttpResponseRedirect(url_item.get_absolute_url())
2
e838dda048a6 qrurls: basic functionality
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    61
    
43
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
    62
def item (request, shorturl, item_id) :
33
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    63
    url_feed = _get_url_feed(shorturl=shorturl)
42
e4f6ea904257 qrurls item view: only show published items
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    64
e4f6ea904257 qrurls item view: only show published items
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    65
    now = timezone.now()
37
e303425cec78 shorturl image view: 404 on invalid item_id
Tero Marttila <terom@fixme.fi>
parents: 34
diff changeset
    66
    try :
42
e4f6ea904257 qrurls item view: only show published items
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    67
        url_item = URLItem.objects.get(shorturl=url_feed, id=int(item_id), published__lt=now)
37
e303425cec78 shorturl image view: 404 on invalid item_id
Tero Marttila <terom@fixme.fi>
parents: 34
diff changeset
    68
    except URLItem.DoesNotExist :
e303425cec78 shorturl image view: 404 on invalid item_id
Tero Marttila <terom@fixme.fi>
parents: 34
diff changeset
    69
        raise Http404()
40
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 37
diff changeset
    70
    
43
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
    71
    if url_item.url :
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
    72
        return HttpResponseRedirect(url_item.url)
3b1f1a928283 rename qrurls image view to item view
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
    73
    elif url_item.image :
51
6f35a169ef01 Make URLImage title optional, use URLFeed title
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    74
        title = url_item.image.title or url_item.shorturl.title
6f35a169ef01 Make URLImage title optional, use URLFeed title
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    75
40
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 37
diff changeset
    76
        return render(request, 'qrurls/image.html', dict(
51
6f35a169ef01 Make URLImage title optional, use URLFeed title
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    77
            title   = title,
40
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 37
diff changeset
    78
            image   = url_item.image,
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 37
diff changeset
    79
        ))
5eefe5a294dc qrurl image title
Tero Marttila <terom@fixme.fi>
parents: 37
diff changeset
    80
    else :
33
b714115da724 use seprate frontend view for url_images in url_items
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    81
        raise Http404()