Loading django/middleware/common.py +11 −10 Original line number Diff line number Diff line Loading @@ -54,18 +54,19 @@ class CommonMiddleware(object): # Check for a redirect based on settings.PREPEND_WWW host = request.get_host() must_prepend = settings.PREPEND_WWW and host and not host.startswith('www.') redirect_url = ('%s://www.%s' % (request.scheme, host)) if must_prepend else '' if settings.PREPEND_WWW and host and not host.startswith('www.'): host = 'www.' + host # Check if we also need to append a slash so we can do it all # with a single redirect. # Check if a slash should be appended if self.should_redirect_with_slash(request): path = self.get_full_path_with_slash(request) else: path = request.get_full_path() return self.response_redirect_class('%s://%s%s' % (request.scheme, host, path)) # Return a redirect if necessary if redirect_url or path != request.get_full_path(): redirect_url += path return self.response_redirect_class(redirect_url) def should_redirect_with_slash(self, request): """ Loading docs/releases/1.9.5.txt +3 −0 Original line number Diff line number Diff line Loading @@ -34,3 +34,6 @@ Bugfixes * Fixed a crash when using a reverse lookup with a subquery when a ``ForeignKey`` has a ``to_field`` set to something other than the primary key (:ticket:`26373`). * Fixed a regression in ``CommonMiddleware`` that caused spurious warnings in logs on requests missing a trailing slash (:ticket:`26293`). tests/middleware/tests.py +1 −6 Original line number Diff line number Diff line Loading @@ -67,10 +67,8 @@ class CommonMiddlewareTest(SimpleTestCase): APPEND_SLASH should redirect slashless URLs to a valid pattern. """ request = self.rf.get('/slash') response = HttpResponseNotFound() r = CommonMiddleware().process_response(request, response) r = CommonMiddleware().process_request(request) self.assertEqual(r.status_code, 301) self.assertEqual(r.url, '/slash/') @override_settings(APPEND_SLASH=True) def test_append_slash_redirect_querystring(self): Loading Loading @@ -301,9 +299,6 @@ class CommonMiddlewareTest(SimpleTestCase): request = self.rf.get('/slash') request.META['QUERY_STRING'] = force_str('drink=café') r = CommonMiddleware().process_request(request) self.assertIsNone(r) response = HttpResponseNotFound() r = CommonMiddleware().process_response(request, response) self.assertEqual(r.status_code, 301) def test_response_redirect_class(self): Loading Loading
django/middleware/common.py +11 −10 Original line number Diff line number Diff line Loading @@ -54,18 +54,19 @@ class CommonMiddleware(object): # Check for a redirect based on settings.PREPEND_WWW host = request.get_host() must_prepend = settings.PREPEND_WWW and host and not host.startswith('www.') redirect_url = ('%s://www.%s' % (request.scheme, host)) if must_prepend else '' if settings.PREPEND_WWW and host and not host.startswith('www.'): host = 'www.' + host # Check if we also need to append a slash so we can do it all # with a single redirect. # Check if a slash should be appended if self.should_redirect_with_slash(request): path = self.get_full_path_with_slash(request) else: path = request.get_full_path() return self.response_redirect_class('%s://%s%s' % (request.scheme, host, path)) # Return a redirect if necessary if redirect_url or path != request.get_full_path(): redirect_url += path return self.response_redirect_class(redirect_url) def should_redirect_with_slash(self, request): """ Loading
docs/releases/1.9.5.txt +3 −0 Original line number Diff line number Diff line Loading @@ -34,3 +34,6 @@ Bugfixes * Fixed a crash when using a reverse lookup with a subquery when a ``ForeignKey`` has a ``to_field`` set to something other than the primary key (:ticket:`26373`). * Fixed a regression in ``CommonMiddleware`` that caused spurious warnings in logs on requests missing a trailing slash (:ticket:`26293`).
tests/middleware/tests.py +1 −6 Original line number Diff line number Diff line Loading @@ -67,10 +67,8 @@ class CommonMiddlewareTest(SimpleTestCase): APPEND_SLASH should redirect slashless URLs to a valid pattern. """ request = self.rf.get('/slash') response = HttpResponseNotFound() r = CommonMiddleware().process_response(request, response) r = CommonMiddleware().process_request(request) self.assertEqual(r.status_code, 301) self.assertEqual(r.url, '/slash/') @override_settings(APPEND_SLASH=True) def test_append_slash_redirect_querystring(self): Loading Loading @@ -301,9 +299,6 @@ class CommonMiddlewareTest(SimpleTestCase): request = self.rf.get('/slash') request.META['QUERY_STRING'] = force_str('drink=café') r = CommonMiddleware().process_request(request) self.assertIsNone(r) response = HttpResponseNotFound() r = CommonMiddleware().process_response(request, response) self.assertEqual(r.status_code, 301) def test_response_redirect_class(self): Loading