diff options
| author | Bas Peschier <bpeschier@bpeschier.nl> | 2015-03-22 20:04:31 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-03-26 09:26:55 -0400 |
| commit | 9128762f1608f9633005f16c95270058a50ada2b (patch) | |
| tree | bb16e0680b703904d40f57cb230eaba5afc05bc8 /django/middleware/common.py | |
| parent | 3e64f3d0fc285080b42b78b67565b6ed939f9a24 (diff) | |
Fixed #19910 -- Added slash to i18n redirect if APPEND_SLASH is set.
This introduces a force_append_slash argument for request.get_full_path()
which is used by RedirectFallbackMiddleware and CommonMiddleware when
handling redirects for settings.APPEND_SLASH.
Diffstat (limited to 'django/middleware/common.py')
| -rw-r--r-- | django/middleware/common.py | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/django/middleware/common.py b/django/middleware/common.py index 6c5843220f..dad1e6b2eb 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -6,9 +6,7 @@ from django import http from django.conf import settings from django.core import urlresolvers from django.core.mail import mail_managers -from django.utils import six from django.utils.encoding import force_text -from django.utils.http import urlquote logger = logging.getLogger('django.request') @@ -60,7 +58,7 @@ class CommonMiddleware(object): # Check for a redirect based on settings.APPEND_SLASH # and settings.PREPEND_WWW host = request.get_host() - old_url = [host, request.path] + old_url = [host, request.get_full_path()] new_url = old_url[:] if (settings.PREPEND_WWW and old_url[0] and @@ -73,7 +71,7 @@ class CommonMiddleware(object): urlconf = getattr(request, 'urlconf', None) if (not urlresolvers.is_valid_path(request.path_info, urlconf) and urlresolvers.is_valid_path("%s/" % request.path_info, urlconf)): - new_url[1] = new_url[1] + '/' + new_url[1] = request.get_full_path(force_append_slash=True) if settings.DEBUG and request.method in ('POST', 'PUT', 'PATCH'): raise RuntimeError(("" "You called this URL via %(method)s, but the URL doesn't end " @@ -89,21 +87,9 @@ class CommonMiddleware(object): if new_url[0] != old_url[0]: newurl = "%s://%s%s" % ( request.scheme, - new_url[0], urlquote(new_url[1])) + new_url[0], new_url[1]) else: - newurl = urlquote(new_url[1]) - if request.META.get('QUERY_STRING', ''): - if six.PY3: - newurl += '?' + request.META['QUERY_STRING'] - else: - # `query_string` is a bytestring. Appending it to the unicode - # string `newurl` will fail if it isn't ASCII-only. This isn't - # allowed; only broken software generates such query strings. - # Better drop the invalid query string than crash (#15152). - try: - newurl += '?' + request.META['QUERY_STRING'].decode() - except UnicodeDecodeError: - pass + newurl = new_url[1] return self.response_redirect_class(newurl) def process_response(self, request, response): |
