Fixed #24834 -- Fixed get_current_site() when Host header contains port.

When the Host header contains a port, looking up the Site record fails
as the host will never match the domain.
This commit is contained in:
Nick Pope 2015-05-03 23:08:28 +01:00 committed by Tim Graham
parent 7f1168e387
commit b3d5dc6932
5 changed files with 72 additions and 9 deletions

View file

@ -495,10 +495,23 @@ Finally, to avoid repetitive fallback code, the framework provides a
A function that checks if ``django.contrib.sites`` is installed and
returns either the current :class:`~django.contrib.sites.models.Site`
object or a :class:`~django.contrib.sites.requests.RequestSite` object
based on the request.
based on the request. It looks up the current site based on
:meth:`request.get_host() <django.http.HttpRequest.get_host>` if the
:setting:`SITE_ID` setting is not defined.
Both a domain and a port may be returned by :meth:`request.get_host()
<django.http.HttpRequest.get_host>` when the Host header has a port
explicitly specified, e.g. ``example.com:80``. In such cases, if the
lookup fails because the host does not match a record in the database,
the port is stripped and the lookup is retried with the domain part
only. This does not apply to
:class:`~django.contrib.sites.requests.RequestSite` which will always
use the unmodified host.
.. versionchanged:: 1.8
This function will now lookup the current site based on
:meth:`request.get_host() <django.http.HttpRequest.get_host>` if the
:setting:`SITE_ID` setting is not defined.
Looking up the current site based on ``request.get_host()`` was added.
.. versionchanged:: 1.9
Retrying the lookup with the port stripped was added.

View file

@ -208,7 +208,11 @@ Minor features
:mod:`django.contrib.sites`
^^^^^^^^^^^^^^^^^^^^^^^^^^^
* ...
* :func:`~django.contrib.sites.shortcuts.get_current_site` now handles the case
where ``request.get_host()`` returns ``domain:port``, e.g.
``example.com:80``. If the lookup fails because the host does not match a
record in the database and the host has a port, the port is stripped and the
lookup is retried with the domain part only.
:mod:`django.contrib.staticfiles`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^