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',
|
||||
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,5 +1,7 @@
|
||||
from defaults import *
|
||||
from i18n import *
|
||||
from static import *
|
||||
from generic.date_based 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 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,4 +1,4 @@
|
||||
from django.http import HttpResponse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django import forms
|
||||
from django.views.generic.create_update import create_object
|
||||
|
||||
@ -27,3 +27,10 @@ def custom_create(request):
|
||||
return create_object(request,
|
||||
post_save_redirect='/views/create_update/view/article/%(slug)s/',
|
||||
form_class=SlugChangingArticleForm)
|
||||
|
||||
def redirect(request):
|
||||
"""
|
||||
Forces an HTTP redirect.
|
||||
"""
|
||||
return HttpResponseRedirect("target/")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user