mirror of
https://github.com/django/django.git
synced 2025-07-18 16:49:13 +00:00
[1.0.X] Fixed #10267 -- Correctly handle IRIs in HttpResponse.build_absolute_uri().
Backport of r10539 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10540 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
18baad0d2f
commit
6771f4e348
@ -72,7 +72,7 @@ class HttpRequest(object):
|
|||||||
current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
|
current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
|
||||||
self.get_host(), self.path)
|
self.get_host(), self.path)
|
||||||
location = urljoin(current_uri, location)
|
location = urljoin(current_uri, location)
|
||||||
return location
|
return iri_to_uri(location)
|
||||||
|
|
||||||
def is_secure(self):
|
def is_secure(self):
|
||||||
return os.environ.get("HTTPS") == "on"
|
return os.environ.get("HTTPS") == "on"
|
||||||
@ -398,14 +398,14 @@ class HttpResponseRedirect(HttpResponse):
|
|||||||
|
|
||||||
def __init__(self, redirect_to):
|
def __init__(self, redirect_to):
|
||||||
HttpResponse.__init__(self)
|
HttpResponse.__init__(self)
|
||||||
self['Location'] = iri_to_uri(redirect_to)
|
self['Location'] = redirect_to
|
||||||
|
|
||||||
class HttpResponsePermanentRedirect(HttpResponse):
|
class HttpResponsePermanentRedirect(HttpResponse):
|
||||||
status_code = 301
|
status_code = 301
|
||||||
|
|
||||||
def __init__(self, redirect_to):
|
def __init__(self, redirect_to):
|
||||||
HttpResponse.__init__(self)
|
HttpResponse.__init__(self)
|
||||||
self['Location'] = iri_to_uri(redirect_to)
|
self['Location'] = redirect_to
|
||||||
|
|
||||||
class HttpResponseNotModified(HttpResponse):
|
class HttpResponseNotModified(HttpResponse):
|
||||||
status_code = 304
|
status_code = 304
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
from defaults import *
|
from defaults import *
|
||||||
from i18n import *
|
|
||||||
from static import *
|
|
||||||
from generic.date_based import *
|
|
||||||
from generic.create_update import *
|
from generic.create_update import *
|
||||||
|
from generic.date_based import *
|
||||||
|
from i18n import *
|
||||||
|
from specials import *
|
||||||
|
from static import *
|
||||||
|
|
||||||
|
15
tests/regressiontests/views/tests/specials.py
Normal file
15
tests/regressiontests/views/tests/specials.py
Normal file
@ -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 os import path
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls.defaults import *
|
||||||
@ -38,6 +39,10 @@ urlpatterns = patterns('',
|
|||||||
|
|
||||||
# Static views
|
# Static views
|
||||||
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': media_dir}),
|
(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.
|
# Date-based generic views.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from django.http import HttpResponse
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.views.generic.create_update import create_object
|
from django.views.generic.create_update import create_object
|
||||||
|
|
||||||
@ -27,3 +27,10 @@ def custom_create(request):
|
|||||||
return create_object(request,
|
return create_object(request,
|
||||||
post_save_redirect='/views/create_update/view/article/%(slug)s/',
|
post_save_redirect='/views/create_update/view/article/%(slug)s/',
|
||||||
form_class=SlugChangingArticleForm)
|
form_class=SlugChangingArticleForm)
|
||||||
|
|
||||||
|
def redirect(request):
|
||||||
|
"""
|
||||||
|
Forces an HTTP redirect.
|
||||||
|
"""
|
||||||
|
return HttpResponseRedirect("target/")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user