diff options
| author | Ben Firshman | 2014-09-22 02:18:09 +0200 |
|---|---|---|
| committer | Ben Firshman | 2014-09-22 02:18:09 +0200 |
| commit | 47dcc785c2d6bcbbcf0cbaabdd5d8c825bc97e9c (patch) | |
| tree | f184d0ff8da4d2644ae4faed3bddcb9e5790b596 /src/shorturls/views.py | |
| parent | 967f4ddab7bb68bc1cbd10a30658c65fd67c9acb (diff) | |
| parent | ab5312e7c035e76521140382b47113bcf50acbcf (diff) | |
| download | django-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.py | 25 |
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. |
