Added a get_host() method to HttpRequest. There is still an http.get_host() version in place, so this is fully backwards compatible.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6296 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
061ed82b22
commit
4b610f42d3
|
@ -5,7 +5,7 @@ from django.contrib.admin.views.decorators import staff_member_required
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
|
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
|
||||||
from django.http import Http404, get_host
|
from django.http import Http404
|
||||||
from django.core import urlresolvers
|
from django.core import urlresolvers
|
||||||
from django.contrib.admin import utils
|
from django.contrib.admin import utils
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
|
@ -29,7 +29,7 @@ def bookmarklets(request):
|
||||||
# Hack! This couples this view to the URL it lives at.
|
# Hack! This couples this view to the URL it lives at.
|
||||||
admin_root = request.path[:-len('doc/bookmarklets/')]
|
admin_root = request.path[:-len('doc/bookmarklets/')]
|
||||||
return render_to_response('admin_doc/bookmarklets.html', {
|
return render_to_response('admin_doc/bookmarklets.html', {
|
||||||
'admin_url': "%s://%s%s" % (request.is_secure() and 'https' or 'http', get_host(request), admin_root),
|
'admin_url': "%s://%s%s" % (request.is_secure() and 'https' or 'http', request.get_host(), admin_root),
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
bookmarklets = staff_member_required(bookmarklets)
|
bookmarklets = staff_member_required(bookmarklets)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.http import get_host
|
|
||||||
|
|
||||||
SITE_CACHE = {}
|
SITE_CACHE = {}
|
||||||
|
|
||||||
|
@ -54,7 +53,7 @@ class RequestSite(object):
|
||||||
The save() and delete() methods raise NotImplementedError.
|
The save() and delete() methods raise NotImplementedError.
|
||||||
"""
|
"""
|
||||||
def __init__(self, request):
|
def __init__(self, request):
|
||||||
self.domain = self.name = get_host(request)
|
self.domain = self.name = request.get_host()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.domain
|
return self.domain
|
||||||
|
|
|
@ -142,7 +142,7 @@ def fix_location_header(request, response):
|
||||||
Code constructing response objects is free to insert relative paths and
|
Code constructing response objects is free to insert relative paths and
|
||||||
this function converts them to absolute paths.
|
this function converts them to absolute paths.
|
||||||
"""
|
"""
|
||||||
if 'Location' in response and http.get_host(request):
|
if 'Location' in response and request.get_host():
|
||||||
response['Location'] = request.build_absolute_uri(response['Location'])
|
response['Location'] = request.build_absolute_uri(response['Location'])
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,20 @@ class HttpRequest(object):
|
||||||
|
|
||||||
__contains__ = has_key
|
__contains__ = has_key
|
||||||
|
|
||||||
|
def get_host(self):
|
||||||
|
"Returns the HTTP host using the environment or request headers."
|
||||||
|
# We try three options, in order of decreasing preference.
|
||||||
|
host = self.META.get('HTTP_X_FORWARDED_HOST', '')
|
||||||
|
if 'HTTP_HOST' in self.META:
|
||||||
|
host = self.META['HTTP_HOST']
|
||||||
|
else:
|
||||||
|
# Reconstruct the host using the algorithm from PEP 333.
|
||||||
|
host = self.META['SERVER_NAME']
|
||||||
|
server_port = self.META['SERVER_PORT']
|
||||||
|
if server_port != (self.is_secure() and 443 or 80):
|
||||||
|
host = '%s:%s' % (host, server_port)
|
||||||
|
return host
|
||||||
|
|
||||||
def get_full_path(self):
|
def get_full_path(self):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
@ -57,7 +71,7 @@ class HttpRequest(object):
|
||||||
location = self.get_full_path()
|
location = self.get_full_path()
|
||||||
if not ':' in location:
|
if not ':' in location:
|
||||||
current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
|
current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
|
||||||
get_host(self), self.path)
|
self.get_host(), self.path)
|
||||||
location = urljoin(current_uri, location)
|
location = urljoin(current_uri, location)
|
||||||
return location
|
return location
|
||||||
|
|
||||||
|
@ -381,19 +395,9 @@ class HttpResponseServerError(HttpResponse):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
HttpResponse.__init__(self, *args, **kwargs)
|
HttpResponse.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
# A backwards compatible alias for HttpRequest.get_host.
|
||||||
def get_host(request):
|
def get_host(request):
|
||||||
"Gets the HTTP host from the environment or request headers."
|
return request.get_host()
|
||||||
# We try three options, in order of decreasing preference.
|
|
||||||
host = request.META.get('HTTP_X_FORWARDED_HOST', '')
|
|
||||||
if 'HTTP_HOST' in request.META:
|
|
||||||
host = request.META['HTTP_HOST']
|
|
||||||
else:
|
|
||||||
# Reconstruct the host using the algorithm from PEP 333.
|
|
||||||
host = request.META['SERVER_NAME']
|
|
||||||
server_port = request.META['SERVER_PORT']
|
|
||||||
if server_port != (request.is_secure() and 443 or 80):
|
|
||||||
host = '%s:%s' % (host, server_port)
|
|
||||||
return host
|
|
||||||
|
|
||||||
# It's neither necessary nor appropriate to use
|
# It's neither necessary nor appropriate to use
|
||||||
# django.utils.encoding.smart_unicode for parsing URLs and form inputs. Thus,
|
# django.utils.encoding.smart_unicode for parsing URLs and form inputs. Thus,
|
||||||
|
|
|
@ -32,7 +32,7 @@ class CommonMiddleware(object):
|
||||||
return http.HttpResponseForbidden('<h1>Forbidden</h1>')
|
return http.HttpResponseForbidden('<h1>Forbidden</h1>')
|
||||||
|
|
||||||
# Check for a redirect based on settings.APPEND_SLASH and settings.PREPEND_WWW
|
# Check for a redirect based on settings.APPEND_SLASH and settings.PREPEND_WWW
|
||||||
host = http.get_host(request)
|
host = request.get_host()
|
||||||
old_url = [host, request.path]
|
old_url = [host, request.path]
|
||||||
new_url = old_url[:]
|
new_url = old_url[:]
|
||||||
if settings.PREPEND_WWW and old_url[0] and not old_url[0].startswith('www.'):
|
if settings.PREPEND_WWW and old_url[0] and not old_url[0].startswith('www.'):
|
||||||
|
@ -61,7 +61,7 @@ class CommonMiddleware(object):
|
||||||
if settings.SEND_BROKEN_LINK_EMAILS:
|
if settings.SEND_BROKEN_LINK_EMAILS:
|
||||||
# If the referrer was from an internal link or a non-search-engine site,
|
# If the referrer was from an internal link or a non-search-engine site,
|
||||||
# send a note to the managers.
|
# send a note to the managers.
|
||||||
domain = http.get_host(request)
|
domain = request.get_host()
|
||||||
referer = request.META.get('HTTP_REFERER', None)
|
referer = request.META.get('HTTP_REFERER', None)
|
||||||
is_internal = _is_internal_request(domain, referer)
|
is_internal = _is_internal_request(domain, referer)
|
||||||
path = request.get_full_path()
|
path = request.get_full_path()
|
||||||
|
|
Loading…
Reference in New Issue