从单个django应用程序提供多个站点

django-multisite的Python项目详细描述


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

自述文件

使用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中的站点id替换为:

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

将这些添加到已安装的应用程序:

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

将加载程序添加到“选项”部分中的settings.py templates中:

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

编辑settings.py中间件(django的中间件类<;1.10):

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 = ''

如果已将缓存多站点别名设置为自定义值,,例如'multisite',将单独的后端添加到settings.py缓存:

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

多站点通过检查所有别名域来确定允许的主机。你可以 还可以将多站点附加主机设置为包括附加主机。这个罐头 包括通配符。:

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

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

开发环境

当处于“开发模式”(默认为 与默认站点ID关联的别名。

开发模式为:
  • 运行测试,即manage.py测试
  • 在settings.debug=true中本地运行,其中主机名是顶级名称,即localhost

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

127.0.0.1 example.com
127.0.0.1 examplealias.com

并访问example.com:8000或exampleAlias.com:8000而不是 通常的本地主机:8000。

域回退

默认情况下,如果域名未知,multisite将用 HTTP 404未找到错误。若要更改此行为,请添加 设置.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

模板加载器还将在 可选的多站点默认模板目录设置,例如:

templates/multisite_templates

跨域cookies

为了支持cross-domain cookies, 为了像单点登录这样的目的, 在下面的顶部添加 settings.py中间件(django的中间件类<;1.10):

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的每个支持组合下运行测试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Admob初始化失败,应用程序在启动时崩溃,即使没有错误   java如何在ibatis中使用存储过程?   java干净体系结构:在不同的环境中分离IO和核心。jar文件   Java streams compare属性在两个列表之间相等,并返回true或false   有没有一种压缩Java Try-Catch块的方法?   Android片段中的java Mapbox SDK   用于IzPack安装的JavaFX本机启动器:控制InnoSetup/WiX/RPMBuild行为   java接口是否可以将一个已经实例化的对象作为属性?   hashmap中的java线程问题   请求中的java字符编码。getRemoteUser()   java将OneTONE链接更改为另一个id为的实体   java当使用javaw启动应用程序时,不会执行关闭钩子。exe   Android java代码更改显示的微调器   java GZIP解压字符串和字节转换   运行springbatch后java LDAP运行状况检查失败