Fixed #10267 -- Correctly handle IRIs in HttpResponse.build_absolute_uri().
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10539 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
794f2d121e
commit
87e6939372
|
@ -72,7 +72,7 @@ class HttpRequest(object):
|
|||
current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
|
||||
self.get_host(), self.path)
|
||||
location = urljoin(current_uri, location)
|
||||
return location
|
||||
return iri_to_uri(location)
|
||||
|
||||
def is_secure(self):
|
||||
return os.environ.get("HTTPS") == "on"
|
||||
|
@ -398,14 +398,14 @@ class HttpResponseRedirect(HttpResponse):
|
|||
|
||||
def __init__(self, redirect_to):
|
||||
HttpResponse.__init__(self)
|
||||
self['Location'] = iri_to_uri(redirect_to)
|
||||
self['Location'] = redirect_to
|
||||
|
||||
class HttpResponsePermanentRedirect(HttpResponse):
|
||||
status_code = 301
|
||||
|
||||
def __init__(self, redirect_to):
|
||||
HttpResponse.__init__(self)
|
||||
self['Location'] = iri_to_uri(redirect_to)
|
||||
self['Location'] = redirect_to
|
||||
|
||||
class HttpResponseNotModified(HttpResponse):
|
||||
status_code = 304
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from defaults import *
|
||||
from i18n import *
|
||||
from static import *
|
||||
from generic.date_based import *
|
||||
from generic.create_update import *
|
||||
from debug import *
|
||||
from defaults import *
|
||||
from generic.create_update import *
|
||||
from generic.date_based import *
|
||||
from i18n import *
|
||||
from specials import *
|
||||
from static import *
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# coding: utf-8
|
||||
from django.test import TestCase
|
||||
|
||||
class URLHandling(TestCase):
|
||||
"""
|
||||
Tests for URL handling in views and responses.
|
||||
"""
|
||||
def test_iri_redirect(self):
|
||||
"""
|
||||
Tests that redirecting to an IRI, requiring encoding before we use it
|
||||
in an HTTP response, is handled correctly.
|
||||
"""
|
||||
response = self.client.get(u'/views/中文/')
|
||||
self.assertRedirects(response, "/views/%E4%B8%AD%E6%96%87/target/")
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
# coding: utf-8
|
||||
from os import path
|
||||
|
||||
from django.conf.urls.defaults import *
|
||||
|
@ -38,6 +39,10 @@ urlpatterns = patterns('',
|
|||
|
||||
# Static views
|
||||
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': media_dir}),
|
||||
|
||||
# Special URLs for particular regression cases.
|
||||
url(u'^中文/$', 'regressiontests.views.views.redirect'),
|
||||
url(u'^中文/target/$', 'regressiontests.views.views.index_page'),
|
||||
)
|
||||
|
||||
# Date-based generic views.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import sys
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django import forms
|
||||
from django.views.debug import technical_500_response
|
||||
from django.views.generic.create_update import create_object
|
||||
|
@ -36,3 +36,10 @@ def raises(request):
|
|||
raise Exception
|
||||
except Exception:
|
||||
return technical_500_response(request, *sys.exc_info())
|
||||
|
||||
def redirect(request):
|
||||
"""
|
||||
Forces an HTTP redirect.
|
||||
"""
|
||||
return HttpResponseRedirect("target/")
|
||||
|
||||
|
|
Loading…
Reference in New Issue