跳转到主要内容

从单个Django应用程序中服务多个网站

项目描述

https://travis-ci.org/ecometrica/django-multisite.svg?branch=master https://coveralls.io/repos/github/ecometrica/django-multisite/badge.svg?branch=master

README

使用pip安装

pip install django-multisite

或者通过git获取代码

git clone git://github.com/ecometrica/django-multisite.git django-multisite

然后运行

python setup.py install

或者将django-multisite/multisite文件夹添加到您的PYTHONPATH。

如果您想贡献,请运行

python setup.py develop

快速入门

将settings.py中的SITE_ID替换为

from multisite import SiteID
SITE_ID = SiteID(default=1)

将这些添加到您的 INSTALLED_APPS 中

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'multisite',
    ...
]

在 settings.py 中添加 TEMPLATES loaders 的 OPTIONS 部分

TEMPLATES = [
    ...
    {
        ...
        'DIRS': {...}
        'OPTIONS': {
            'loaders': (
                'multisite.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            )
        }
        ...
    }
    ...
]

编辑 settings.py 中的 MIDDLEWARE(对于 Django < 1.10 为 MIDDLEWARE_CLASSES)

MIDDLEWARE = (
    ...
    'multisite.middleware.DynamicSiteMiddleware',
    ...
)

在 settings.py 中追加,以便使用可以安全清除的自定义缓存

# The cache connection to use for django-multisite.
# Default: 'default'
CACHE_MULTISITE_ALIAS = 'multisite'

# The cache key prefix that django-multisite should use.
# If not set, defaults to the KEY_PREFIX used in the defined
# CACHE_MULTISITE_ALIAS or the default cache (empty string if not set)
CACHE_MULTISITE_KEY_PREFIX = ''

如果您已将 CACHE_MULTISITE_ALIAS 设置为自定义值,例如 “multisite”,则请在 settings.py 的 CACHES 中添加单独的后端

CACHES = {
    'default': {
        ...
    },
    'multisite': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'TIMEOUT': 60 * 60 * 24,  # 24 hours
        ...
    },
}

多站点通过检查所有别名域名来确定 ALLOWED_HOSTS。您还可以设置 MULTISITE_EXTRA_HOSTS 以包含额外的主机。这可以包括通配符。

MULTISITE_EXTRA_HOSTS = ['example.com']
# will match the single additional host

MULTISITE_EXTRA_HOSTS = ['.example.com']
# will match any host ending '.example.com'

开发环境

在“开发模式”下(默认为与默认 SiteID 关联的别名),多站点返回有效的别名

开发模式是以下之一
  • 运行测试,即 manage.py test

  • 本地运行 settings.DEBUG = True,其中主机名为顶级名称,即 localhost

为了使多站点在本地环境中使用别名,请在您的本地 etc/hosts 文件中添加条目以匹配应用程序中的别名。例如

127.0.0.1 example.com
127.0.0.1 examplealias.com

然后在 example.com:8000 或 examplealias.com:8000 访问您的应用程序,而不是通常的 localhost:8000。

域名回退

默认情况下,如果域名未知,多站点将响应 HTTP 404 Not Found 错误。要更改此行为,请向 settings.py 添加

# The view function or class-based view that django-multisite will
# use when it cannot match the hostname with a Site. This can be
# the name of the function or the function itself.
# Default: None
MULTISITE_FALLBACK = 'django.views.generic.base.RedirectView

# Keyword arguments for the MULTISITE_FALLBACK view.
# Default: {}
MULTISITE_FALLBACK_KWARGS = {'url': 'http://example.com/',
                             'permanent': False}

模板

如有必要,为域名级别的模板创建模板子目录(在 settings.TEMPLATES['DIRS'] 中指定的位置)。

多站点的模板加载器将在名为域名的文件夹中查找模板,例如

templates/example.com

模板加载器还会在由可选的 MULTISITE_DEFAULT_TEMPLATE_DIR 设置指定的文件夹中查找模板,例如

templates/multisite_templates

跨域 Cookie

为了支持跨域 Cookie,例如单点登录,请在 settings.py 的 MIDDLEWARE(对于 Django < 1.10 为 MIDDLEWARE_CLASSES)顶部添加以下内容

MIDDLEWARE = (
    'multisite.middleware.CookieDomainMiddleware',
    ...
)

CookieDomainMiddleware 将咨询 Public Suffix List 以确定有效的顶级域名。它将此文件缓存在系统的默认临时目录中,文件名为 effective_tld_names.dat。要更改此设置,请修改 settings.py

MULTISITE_PUBLIC_SUFFIX_LIST_CACHE = '/path/to/multisite_tld.dat'

默认情况下,任何未设置域的 Cookie 将重置为允许 *.domain.tld。要更改此设置,请修改 settings.py

MULTISITE_COOKIE_DOMAIN_DEPTH = 1  # Allow only *.subdomain.domain.tld

为了获取列表的新版本,请运行

manage.py update_public_suffix_list

测试

要运行测试

python setup.py test

或者

pytest

在部署更改之前,为了验证它没有通过运行

tox

这将运行所有受支持的 Django 和 Python 组合的测试。

项目详情


下载文件

下载您平台的文件。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。

源分发

django-multisite-1.9.0.tar.gz (25.4 kB 查看哈希值)

上传时间 源代码

构建发行版

django_multisite-1.9.0-py3-none-any.whl (31.1 kB 查看哈希值)

上传时间 Python 3

支持者