Commits

Anonymous committed b1847ef

Added a get_host() method to HttpRequest. There is still an http.get_host() version in place, so this is fully backwards compatible.

Comments (0)

Files changed (5)

django/contrib/admin/views/doc.py

 from django.db import models
 from django.shortcuts import render_to_response
 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.contrib.admin import utils
 from django.contrib.sites.models import Site
     # Hack! This couples this view to the URL it lives at.
     admin_root = request.path[:-len('doc/bookmarklets/')]
     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))
 bookmarklets = staff_member_required(bookmarklets)
 

django/contrib/sites/models.py

 from django.db import models
 from django.utils.translation import ugettext_lazy as _
-from django.http import get_host
 
 SITE_CACHE = {}
 
     The save() and delete() methods raise NotImplementedError.
     """
     def __init__(self, request):
-        self.domain = self.name = get_host(request)
+        self.domain = self.name = request.get_host()
 
     def __unicode__(self):
         return self.domain

django/core/handlers/base.py

     Code constructing response objects is free to insert relative paths and
     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'])
     return response
 

django/http/__init__.py

 
     __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):
         return ''
 
             location = self.get_full_path()
         if not ':' in location:
             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)
         return location
 
     def __init__(self, *args, **kwargs):
         HttpResponse.__init__(self, *args, **kwargs)
 
+# A backwards compatible alias for HttpRequest.get_host.
 def get_host(request):
-    "Gets the HTTP host from the environment or request headers."
-    # 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
+    return request.get_host()
 
 # It's neither necessary nor appropriate to use
 # django.utils.encoding.smart_unicode for parsing URLs and form inputs. Thus,

django/middleware/common.py

                     return http.HttpResponseForbidden('<h1>Forbidden</h1>')
 
         # 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]
         new_url = old_url[:]
         if settings.PREPEND_WWW and old_url[0] and not old_url[0].startswith('www.'):
             if settings.SEND_BROKEN_LINK_EMAILS:
                 # If the referrer was from an internal link or a non-search-engine site,
                 # send a note to the managers.
-                domain = http.get_host(request)
+                domain = request.get_host()
                 referer = request.META.get('HTTP_REFERER', None)
                 is_internal = _is_internal_request(domain, referer)
                 path = request.get_full_path()