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:36:57 +0100
commitb8c6de31a6f08321a6cf6e3ede2dab90c9f1febd (patch)
tree4d558a35a6a7f26efc0d46b705091758446670ac /django
parent830b9fde460cedeb9a9a52e11a2d456d08c5198f (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.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()