summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2013-02-08 16:32:09 +0100
committerClaude Paroz <claude@2xlibre.net>2013-02-08 16:32:09 +0100
commit2ed90eac49b99d66ee4f2d59af8553274a4d095f (patch)
treeae2d8caa663fc585d7acfbba08fcc69f8911211e /django
parente486475a13ba626f67008ade3544c74003f0a881 (diff)
Fixed #19779 -- Checked contrib.sites presence in RedirectFallbackMiddleware
Thanks Aymeric Augustin for the report and directions for the patch.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/redirects/middleware.py11
-rw-r--r--django/contrib/redirects/tests.py9
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()