aboutsummaryrefslogtreecommitdiffstats
path: root/src/shorturls/views.py
diff options
context:
space:
mode:
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.