diff options
| author | Claude Paroz <claude@2xlibre.net> | 2013-02-08 16:32:09 +0100 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2013-02-08 16:36:57 +0100 |
| commit | b8c6de31a6f08321a6cf6e3ede2dab90c9f1febd (patch) | |
| tree | 4d558a35a6a7f26efc0d46b705091758446670ac /django | |
| parent | 830b9fde460cedeb9a9a52e11a2d456d08c5198f (diff) | |
[1.5.x] Fixed #19779 -- Checked contrib.sites presence in RedirectFallbackMiddleware
Thanks Aymeric Augustin for the report and directions for the patch.
Backport of 2ed90eac from master.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/redirects/middleware.py | 11 | ||||
| -rw-r--r-- | django/contrib/redirects/tests.py | 9 |
2 files changed, 19 insertions, 1 deletions
diff --git a/django/contrib/redirects/middleware.py b/django/contrib/redirects/middleware.py index f5d35946bc..03c9d97c0d 100644 --- a/django/contrib/redirects/middleware.py +++ b/django/contrib/redirects/middleware.py @@ -1,11 +1,20 @@ from __future__ import unicode_literals +from django.conf import settings from django.contrib.redirects.models import Redirect from django.contrib.sites.models import get_current_site +from django.core.exceptions import ImproperlyConfigured from django import http -from django.conf import settings + class RedirectFallbackMiddleware(object): + def __init__(self): + if 'django.contrib.sites' not in settings.INSTALLED_APPS: + raise ImproperlyConfigured( + "You cannot use RedirectFallbackMiddleware when " + "django.contrib.sites is not installed." + ) + def process_response(self, request, response): if response.status_code != 404: return response # No need to check for a redirect for non-404 responses. diff --git a/django/contrib/redirects/tests.py b/django/contrib/redirects/tests.py index 4ea8523199..bdcdf4a9e1 100644 --- a/django/contrib/redirects/tests.py +++ b/django/contrib/redirects/tests.py @@ -1,9 +1,11 @@ from django.conf import settings from django.contrib.sites.models import Site +from django.core.exceptions import ImproperlyConfigured from django.test import TestCase from django.test.utils import override_settings from django.utils import six +from .middleware import RedirectFallbackMiddleware from .models import Redirect @@ -52,3 +54,10 @@ class RedirectTests(TestCase): site=self.site, old_path='/initial', new_path='') response = self.client.get('/initial') self.assertEqual(response.status_code, 410) + + @override_settings( + INSTALLED_APPS=[app for app in settings.INSTALLED_APPS + if app != 'django.contrib.sites']) + def test_sites_not_installed(self): + with self.assertRaises(ImproperlyConfigured): + RedirectFallbackMiddleware() |
