aboutsummaryrefslogtreecommitdiffstats
path: root/src/shorturls/views.py
diff options
context:
space:
mode:
authorBen Firshman2014-09-22 02:18:09 +0200
committerBen Firshman2014-09-22 02:18:09 +0200
commit47dcc785c2d6bcbbcf0cbaabdd5d8c825bc97e9c (patch)
treef184d0ff8da4d2644ae4faed3bddcb9e5790b596 /src/shorturls/views.py
parent967f4ddab7bb68bc1cbd10a30658c65fd67c9acb (diff)
parentab5312e7c035e76521140382b47113bcf50acbcf (diff)
downloaddjango-shorturls-47dcc785c2d6bcbbcf0cbaabdd5d8c825bc97e9c.tar.bz2
Merge pull request #8 from bfirsh/crockford-base32
Add Crockford's base32 and performance improvements
Diffstat (limited to 'src/shorturls/views.py')
-rw-r--r--src/shorturls/views.py25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/shorturls/views.py b/src/shorturls/views.py
index d811fde..2d0a47b 100644
--- a/src/shorturls/views.py
+++ b/src/shorturls/views.py
@@ -4,9 +4,9 @@ from django.contrib.sites.models import Site, RequestSite
from django.db import models
from django.http import HttpResponsePermanentRedirect, Http404
from django.shortcuts import get_object_or_404
-from shorturls.baseconv import base62
+from shorturls import default_converter
-def redirect(request, prefix, tiny):
+def redirect(request, prefix, tiny, converter=default_converter):
"""
Redirect to a given object from a short URL.
"""
@@ -16,15 +16,18 @@ def redirect(request, prefix, tiny):
# any of that stuff goes wrong.
try:
app_label, model_name = settings.SHORTEN_MODELS[prefix].split('.')
- try:
- model = models.get_model(app_label, model_name)
- except LookupError:
- raise Http404('Bad model.')
- if not model:
- raise ValueError
- id = base62.to_decimal(tiny)
- except (AttributeError, ValueError, KeyError):
- raise Http404('Bad prefix, model, SHORTEN_MODELS, or encoded ID.')
+ except KeyError:
+ raise Http404('Bad prefix.')
+ try:
+ model = models.get_model(app_label, model_name)
+ except LookupError:
+ model = False
+ if not model:
+ raise Http404('Bad model specified in SHORTEN_MODELS.')
+ try:
+ id = converter.to_decimal(tiny)
+ except ValueError:
+ raise Http404('Bad encoded ID.')
# Try to look up the object. If it's not a valid object, or if it doesn't
# have an absolute url, bail again.