django-multisite2 2.0.0__tar.gz → 2.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_multisite2-2.1.0/.flake8 +6 -0
- django_multisite2-2.1.0/.github/dependabot.yml +8 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.github/workflows/build.yml +16 -9
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.pre-commit-config.yaml +13 -7
- django_multisite2-2.1.0/AUTHORS +1 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/CHANGES +7 -1
- django_multisite2-2.1.0/MANIFEST.in +4 -0
- {django-multisite2-2.0.0/django_multisite2.egg-info → django_multisite2-2.1.0}/PKG-INFO +55 -31
- django-multisite2-2.0.0/PKG-INFO → django_multisite2-2.1.0/README.rst +38 -46
- django-multisite2-2.0.0/README.rst → django_multisite2-2.1.0/django_multisite2.egg-info/PKG-INFO +66 -15
- django_multisite2-2.1.0/django_multisite2.egg-info/SOURCES.txt +106 -0
- django_multisite2-2.1.0/django_multisite2.egg-info/requires.txt +7 -0
- django_multisite2-2.1.0/multisite/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/__pycache__/apps.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/__pycache__/exceptions.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/__pycache__/forms.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/__pycache__/hacks.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/__pycache__/threadlocals.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/__pycache__/utils.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/admin/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/admin/__pycache__/alias_admin.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/admin/__pycache__/multisite_changelist.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/admin/__pycache__/multisite_model_admin.cpython-312.pyc +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/multisite_model_admin.py +17 -5
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/exceptions.py +6 -1
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/forms.py +3 -1
- django_multisite2-2.1.0/multisite/management/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/management/commands/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/management/commands/__pycache__/update_public_suffix_list.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/middleware/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/middleware/__pycache__/cookie_domain_middleware.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/middleware/__pycache__/dynamic_site_middleware.cpython-312.pyc +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/middleware/cookie_domain_middleware.py +4 -2
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/middleware/dynamic_site_middleware.py +13 -6
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0003_alter_alias_options_alter_alias_unique_together_and_more.py +0 -1
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0004_alter_alias_managers.py +0 -1
- django_multisite2-2.1.0/multisite/migrations/__pycache__/0001_initial.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/migrations/__pycache__/0002_alter_alias_id_alter_alias_is_canonical.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/migrations/__pycache__/0003_alter_alias_options_alter_alias_unique_together_and_more.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/migrations/__pycache__/0004_alter_alias_managers.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/models/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/models/__pycache__/alias.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/models/__pycache__/managers.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/models/__pycache__/signals.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/models/__pycache__/validators.cpython-312.pyc +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/managers.py +7 -3
- django_multisite2-2.1.0/multisite/tests/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/__pycache__/get_test_allowed_hosts.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/__pycache__/get_test_http_response.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/__pycache__/test_settings.cpython-312.pyc +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/get_test_http_response.py +1 -1
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/__init__.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/request_factory.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_alias.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_contrib_site.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_cookie_domain_middleware.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_dynamic_site_middleware.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_site_cache.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_site_domain.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_site_id.cpython-312.pyc +0 -0
- django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_template_loader.cpython-312.pyc +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_alias.py +5 -2
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_cookie_domain_middleware.py +6 -4
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_dynamic_site_middleware.py +13 -7
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_site_id.py +3 -2
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_template_loader.py +1 -4
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/threadlocals.py +19 -10
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/utils.py +3 -1
- django_multisite2-2.1.0/pyproject.toml +88 -0
- django_multisite2-2.1.0/setup.cfg +4 -0
- django-multisite2-2.0.0/MANIFEST.in +0 -3
- django-multisite2-2.0.0/django_multisite2.egg-info/SOURCES.txt +0 -64
- django-multisite2-2.0.0/django_multisite2.egg-info/not-zip-safe +0 -1
- django-multisite2-2.0.0/django_multisite2.egg-info/requires.txt +0 -1
- django-multisite2-2.0.0/pyproject.toml +0 -32
- django-multisite2-2.0.0/setup.cfg +0 -59
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.coveragerc +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.gitignore +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.yamllint +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/LICENSE +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/django_multisite2.egg-info/dependency_links.txt +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/django_multisite2.egg-info/top_level.txt +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/alias_admin.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/multisite_changelist.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/apps.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/hacks.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/management/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/management/commands/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/management/commands/update_public_suffix_list.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/middleware/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0001_initial.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0002_alter_alias_id_alter_alias_is_canonical.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/alias.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/signals.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/validators.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/get_test_allowed_hosts.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/hosts.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/test_settings.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/request_factory.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_contrib_site.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_site_cache.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_site_domain.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/__init__.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/apps.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/urls.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/views.py +0 -0
- {django-multisite2-2.0.0 → django_multisite2-2.1.0}/runtests.py +0 -0
|
@@ -5,20 +5,16 @@ on: [push, pull_request]
|
|
|
5
5
|
|
|
6
6
|
jobs:
|
|
7
7
|
build:
|
|
8
|
-
name:
|
|
8
|
+
name: |
|
|
9
|
+
build (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }}, ${{ matrix.database-engine }})
|
|
9
10
|
runs-on: ubuntu-latest
|
|
10
11
|
|
|
11
12
|
strategy:
|
|
12
13
|
fail-fast: false
|
|
13
14
|
matrix:
|
|
14
|
-
python-version: ['3.
|
|
15
|
-
django-version: ['
|
|
16
|
-
|
|
17
|
-
exclude:
|
|
18
|
-
- python-version: '3.12'
|
|
19
|
-
django-version: '4.2'
|
|
20
|
-
- python-version: '3.11'
|
|
21
|
-
django-version: 'dev'
|
|
15
|
+
python-version: ['3.12', '3.13']
|
|
16
|
+
django-version: ['5.2', 'dev']
|
|
17
|
+
database-engine: ["mysql", "postgres"]
|
|
22
18
|
services:
|
|
23
19
|
mysql:
|
|
24
20
|
image: mysql:latest
|
|
@@ -28,6 +24,17 @@ jobs:
|
|
|
28
24
|
ports:
|
|
29
25
|
- 3306:3306
|
|
30
26
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
27
|
+
postgres:
|
|
28
|
+
image: postgres:latest
|
|
29
|
+
env:
|
|
30
|
+
POSTGRES_PASSWORD: postgres
|
|
31
|
+
options: >-
|
|
32
|
+
--health-cmd pg_isready
|
|
33
|
+
--health-interval 10s
|
|
34
|
+
--health-timeout 5s
|
|
35
|
+
--health-retries 5
|
|
36
|
+
ports:
|
|
37
|
+
- 5432:5432
|
|
31
38
|
|
|
32
39
|
steps:
|
|
33
40
|
- name: Install pycups and words dependency
|
|
@@ -3,32 +3,32 @@ exclude: tests/etc/user-*
|
|
|
3
3
|
|
|
4
4
|
repos:
|
|
5
5
|
- repo: https://github.com/PyCQA/bandit
|
|
6
|
-
rev: 1.
|
|
6
|
+
rev: 1.8.6
|
|
7
7
|
hooks:
|
|
8
8
|
- id: bandit
|
|
9
9
|
args:
|
|
10
10
|
- "-x *test*.py"
|
|
11
11
|
|
|
12
12
|
- repo: https://github.com/psf/black
|
|
13
|
-
rev:
|
|
13
|
+
rev: 25.1.0
|
|
14
14
|
hooks:
|
|
15
15
|
- id: black
|
|
16
16
|
language_version: python3.10
|
|
17
17
|
|
|
18
18
|
- repo: https://github.com/pycqa/flake8
|
|
19
|
-
rev:
|
|
19
|
+
rev: 7.3.0
|
|
20
20
|
hooks:
|
|
21
21
|
- id: flake8
|
|
22
22
|
args:
|
|
23
|
-
- "--config
|
|
23
|
+
- "--config=.flake8"
|
|
24
24
|
|
|
25
25
|
- repo: https://github.com/PyCQA/isort
|
|
26
|
-
rev: 5.
|
|
26
|
+
rev: 5.13.2
|
|
27
27
|
hooks:
|
|
28
28
|
- id: isort
|
|
29
29
|
|
|
30
30
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
31
|
-
rev:
|
|
31
|
+
rev: v5.0.0
|
|
32
32
|
hooks:
|
|
33
33
|
- id: requirements-txt-fixer
|
|
34
34
|
files: requirements/.*\.txt$
|
|
@@ -40,10 +40,16 @@ repos:
|
|
|
40
40
|
- id: check-merge-conflict
|
|
41
41
|
- id: debug-statements
|
|
42
42
|
- id: detect-private-key
|
|
43
|
+
- id: check-toml
|
|
43
44
|
|
|
44
45
|
- repo: https://github.com/adrienverge/yamllint
|
|
45
|
-
rev: v1.
|
|
46
|
+
rev: v1.37.1
|
|
46
47
|
hooks:
|
|
47
48
|
- id: yamllint
|
|
48
49
|
args:
|
|
49
50
|
- "--strict"
|
|
51
|
+
|
|
52
|
+
- repo: https://github.com/rstcheck/rstcheck
|
|
53
|
+
rev: v6.2.5
|
|
54
|
+
hooks:
|
|
55
|
+
- id: rstcheck
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Leonid S Shestera <leonid@shestera.ru>
|
|
@@ -2,10 +2,16 @@
|
|
|
2
2
|
Release Notes
|
|
3
3
|
=============
|
|
4
4
|
|
|
5
|
+
2.0.1
|
|
6
|
+
-----
|
|
7
|
+
- change from ValueError to multisite specific exceptions
|
|
8
|
+
when getting default SITE_ID in development mode.
|
|
9
|
+
- add typing hints
|
|
10
|
+
|
|
5
11
|
2.0.0
|
|
6
12
|
-----
|
|
7
13
|
- major refactor, drop support for lower than py 3.11 and DJ4.2
|
|
8
|
-
- drop pytest, use unitests / runtests.py
|
|
14
|
+
- drop pytest, use unitests / runtests.py
|
|
9
15
|
- replace rel.to with related_model (Django 4.2)
|
|
10
16
|
- remove deprecated `process_requests`
|
|
11
17
|
- add more specific exception handling
|
|
@@ -1,42 +1,65 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: django-multisite2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Serve multiple sites from a single Django application
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
Author-email: Leonid S Shestera <leonid@shestera.ru>
|
|
6
|
+
Maintainer-email: Erik van Widenfelt <ew2789@gmail.com>
|
|
7
|
+
License-Expression: GPL-3.0-or-later
|
|
8
|
+
Project-URL: Homepage, http://github.com/erikvw/django-multisite2
|
|
9
|
+
Project-URL: Documentation, http://github.com/erikvw/django-multisite2/blob/develop/README.rst
|
|
10
|
+
Project-URL: Repository, http://github.com/erikvw/django-multisite2.git
|
|
11
|
+
Project-URL: Changelog, http://github.com/erikvw/django-multisite2/blob/main/CHANGES
|
|
12
|
+
Keywords: django,nginx,edc,clinical trials,research,data management,gunicorn,deployment
|
|
11
13
|
Classifier: Environment :: Web Environment
|
|
12
14
|
Classifier: Framework :: Django
|
|
15
|
+
Classifier: Framework :: Django :: 5.2
|
|
16
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
17
|
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier:
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
19
|
Classifier: Operating System :: OS Independent
|
|
16
|
-
Classifier: Programming Language :: Python
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
18
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
-
Classifier:
|
|
20
|
-
|
|
21
|
-
Classifier: Topic :: Software Development :: Libraries
|
|
22
|
-
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Python: >=3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Requires-Python: >=3.12
|
|
24
23
|
Description-Content-Type: text/x-rst
|
|
25
24
|
License-File: LICENSE
|
|
26
25
|
Requires-Dist: tldextract
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Requires-Dist: coverage; extra == "test"
|
|
28
|
+
Requires-Dist: mock; extra == "test"
|
|
29
|
+
Requires-Dist: tox; extra == "test"
|
|
30
|
+
Requires-Dist: pluggy; extra == "test"
|
|
31
|
+
Dynamic: license-file
|
|
27
32
|
|
|
28
|
-
|actions| |codecov| |downloads| |maintainability| |black|
|
|
33
|
+
|pypi| |actions| |codecov| |downloads| |maintainability| |black|
|
|
29
34
|
|
|
30
35
|
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
django_multisite2
|
|
38
|
+
=================
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
With ``django_multisite2`` a single instance of a Django project can serve multiple sites using a single settings file (multi-tenant). The current ``SITE_ID`` is extracted from the URL.
|
|
36
41
|
|
|
37
|
-
|
|
42
|
+
In ``settings``, the static ``SITE_ID`` is replaced with ``django_multisite2`` dynamic ``SiteID``::
|
|
38
43
|
|
|
39
|
-
|
|
44
|
+
# settings.py
|
|
45
|
+
SITE_ID = SiteID(default=1)
|
|
46
|
+
|
|
47
|
+
the dynamic ``SiteID`` behaves like an integer. When combined with ``django_multisite2`` middleware, ``SiteID`` will return the current ``SITE_ID`` based on the url. For example, each url below is an alias of the same server instance. With ``django_multisite2`` you might have something like this::
|
|
48
|
+
|
|
49
|
+
# https://harare.example.com
|
|
50
|
+
>>> from django.conf import settings
|
|
51
|
+
>>> settings.SITE_ID
|
|
52
|
+
10
|
|
53
|
+
|
|
54
|
+
# https://kampala.example.com
|
|
55
|
+
>>> from django.conf import settings
|
|
56
|
+
>>> settings.SITE_ID
|
|
57
|
+
20
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
Python 3.11+ Django 4.2+. New releases are cut from the ``main`` branch.
|
|
61
|
+
|
|
62
|
+
Older versions of Django are supported by the original `django-multisite`_ project.
|
|
40
63
|
|
|
41
64
|
|
|
42
65
|
Installation
|
|
@@ -46,7 +69,7 @@ Install with pip:
|
|
|
46
69
|
|
|
47
70
|
.. code-block::
|
|
48
71
|
|
|
49
|
-
pip install django-multisite2
|
|
72
|
+
pip install django-multisite2
|
|
50
73
|
|
|
51
74
|
|
|
52
75
|
Replace your ``SITE_ID`` in ``settings.py`` to:
|
|
@@ -129,6 +152,9 @@ settings.py::
|
|
|
129
152
|
|
|
130
153
|
Templates
|
|
131
154
|
---------
|
|
155
|
+
|
|
156
|
+
This feature has been removed in version 2.0.0.
|
|
157
|
+
|
|
132
158
|
If required, create template subdirectories for domain level templates (in a
|
|
133
159
|
location specified in settings.TEMPLATES['DIRS'].
|
|
134
160
|
|
|
@@ -144,12 +170,10 @@ optional MULTISITE_DEFAULT_TEMPLATE_DIR setting, e.g.::
|
|
|
144
170
|
templates/multisite_templates
|
|
145
171
|
|
|
146
172
|
|
|
147
|
-
Cross-domain
|
|
148
|
-
|
|
173
|
+
Cross-domain cookie support
|
|
174
|
+
---------------------------
|
|
149
175
|
|
|
150
|
-
In order to support `cross-domain cookies`_,
|
|
151
|
-
for purposes like single-sign-on,
|
|
152
|
-
prepend the following to the top of
|
|
176
|
+
In order to support `cross-domain cookies`_ , for purposes like single-sign-on, prepend the following to the top of
|
|
153
177
|
settings.py MIDDLEWARE (MIDDLEWARE_CLASSES for Django < 1.10)::
|
|
154
178
|
|
|
155
179
|
MIDDLEWARE = (
|
|
@@ -178,8 +202,6 @@ run::
|
|
|
178
202
|
|
|
179
203
|
manage.py update_public_suffix_list
|
|
180
204
|
|
|
181
|
-
.. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
|
|
182
|
-
.. _Public Suffix List: http://publicsuffix.org/
|
|
183
205
|
|
|
184
206
|
Post-migrate signal: post_migrate_sync_alias
|
|
185
207
|
--------------------------------------------
|
|
@@ -222,7 +244,9 @@ To run the tests::
|
|
|
222
244
|
|
|
223
245
|
python runtests.py
|
|
224
246
|
|
|
225
|
-
|
|
247
|
+
.. _django-multisite: https://github.com/ecometrica/django-multisite
|
|
248
|
+
.. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
|
|
249
|
+
.. _Public Suffix List: http://publicsuffix.org/
|
|
226
250
|
|
|
227
251
|
.. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg
|
|
228
252
|
:target: https://pypi.python.org/pypi/django-multisite2
|
|
@@ -1,42 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
Name: django-multisite2
|
|
3
|
-
Version: 2.0.0
|
|
4
|
-
Summary: Serve multiple sites from a single Django application
|
|
5
|
-
Home-page: http://github.com/erikvw/django-multisite
|
|
6
|
-
Author: Leonid S Shestera
|
|
7
|
-
Author-email: leonid@shestera.ru
|
|
8
|
-
Maintainer: Ecometrica
|
|
9
|
-
Maintainer-email: dev@ecometrica.com
|
|
10
|
-
Classifier: Development Status :: 4 - Beta
|
|
11
|
-
Classifier: Environment :: Web Environment
|
|
12
|
-
Classifier: Framework :: Django
|
|
13
|
-
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
15
|
-
Classifier: Operating System :: OS Independent
|
|
16
|
-
Classifier: Programming Language :: Python
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
-
Classifier: Topic :: Internet
|
|
20
|
-
Classifier: Topic :: Internet :: WWW/HTTP
|
|
21
|
-
Classifier: Topic :: Software Development :: Libraries
|
|
22
|
-
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Python: >=3.11
|
|
24
|
-
Description-Content-Type: text/x-rst
|
|
25
|
-
License-File: LICENSE
|
|
26
|
-
Requires-Dist: tldextract
|
|
27
|
-
|
|
28
|
-
|actions| |codecov| |downloads| |maintainability| |black|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
README
|
|
33
|
-
======
|
|
34
|
-
|
|
35
|
-
Python 3.11+ Django 4.2+
|
|
1
|
+
|pypi| |actions| |codecov| |downloads| |maintainability| |black|
|
|
36
2
|
|
|
37
|
-
Older versions of Django are supported by the original `django-multisite`_ project.
|
|
38
3
|
|
|
39
|
-
|
|
4
|
+
|
|
5
|
+
django_multisite2
|
|
6
|
+
=================
|
|
7
|
+
|
|
8
|
+
With ``django_multisite2`` a single instance of a Django project can serve multiple sites using a single settings file (multi-tenant). The current ``SITE_ID`` is extracted from the URL.
|
|
9
|
+
|
|
10
|
+
In ``settings``, the static ``SITE_ID`` is replaced with ``django_multisite2`` dynamic ``SiteID``::
|
|
11
|
+
|
|
12
|
+
# settings.py
|
|
13
|
+
SITE_ID = SiteID(default=1)
|
|
14
|
+
|
|
15
|
+
the dynamic ``SiteID`` behaves like an integer. When combined with ``django_multisite2`` middleware, ``SiteID`` will return the current ``SITE_ID`` based on the url. For example, each url below is an alias of the same server instance. With ``django_multisite2`` you might have something like this::
|
|
16
|
+
|
|
17
|
+
# https://harare.example.com
|
|
18
|
+
>>> from django.conf import settings
|
|
19
|
+
>>> settings.SITE_ID
|
|
20
|
+
10
|
|
21
|
+
|
|
22
|
+
# https://kampala.example.com
|
|
23
|
+
>>> from django.conf import settings
|
|
24
|
+
>>> settings.SITE_ID
|
|
25
|
+
20
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Python 3.11+ Django 4.2+. New releases are cut from the ``main`` branch.
|
|
29
|
+
|
|
30
|
+
Older versions of Django are supported by the original `django-multisite`_ project.
|
|
40
31
|
|
|
41
32
|
|
|
42
33
|
Installation
|
|
@@ -46,7 +37,7 @@ Install with pip:
|
|
|
46
37
|
|
|
47
38
|
.. code-block::
|
|
48
39
|
|
|
49
|
-
pip install django-multisite2
|
|
40
|
+
pip install django-multisite2
|
|
50
41
|
|
|
51
42
|
|
|
52
43
|
Replace your ``SITE_ID`` in ``settings.py`` to:
|
|
@@ -129,6 +120,9 @@ settings.py::
|
|
|
129
120
|
|
|
130
121
|
Templates
|
|
131
122
|
---------
|
|
123
|
+
|
|
124
|
+
This feature has been removed in version 2.0.0.
|
|
125
|
+
|
|
132
126
|
If required, create template subdirectories for domain level templates (in a
|
|
133
127
|
location specified in settings.TEMPLATES['DIRS'].
|
|
134
128
|
|
|
@@ -144,12 +138,10 @@ optional MULTISITE_DEFAULT_TEMPLATE_DIR setting, e.g.::
|
|
|
144
138
|
templates/multisite_templates
|
|
145
139
|
|
|
146
140
|
|
|
147
|
-
Cross-domain
|
|
148
|
-
|
|
141
|
+
Cross-domain cookie support
|
|
142
|
+
---------------------------
|
|
149
143
|
|
|
150
|
-
In order to support `cross-domain cookies`_,
|
|
151
|
-
for purposes like single-sign-on,
|
|
152
|
-
prepend the following to the top of
|
|
144
|
+
In order to support `cross-domain cookies`_ , for purposes like single-sign-on, prepend the following to the top of
|
|
153
145
|
settings.py MIDDLEWARE (MIDDLEWARE_CLASSES for Django < 1.10)::
|
|
154
146
|
|
|
155
147
|
MIDDLEWARE = (
|
|
@@ -178,8 +170,6 @@ run::
|
|
|
178
170
|
|
|
179
171
|
manage.py update_public_suffix_list
|
|
180
172
|
|
|
181
|
-
.. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
|
|
182
|
-
.. _Public Suffix List: http://publicsuffix.org/
|
|
183
173
|
|
|
184
174
|
Post-migrate signal: post_migrate_sync_alias
|
|
185
175
|
--------------------------------------------
|
|
@@ -222,7 +212,9 @@ To run the tests::
|
|
|
222
212
|
|
|
223
213
|
python runtests.py
|
|
224
214
|
|
|
225
|
-
|
|
215
|
+
.. _django-multisite: https://github.com/ecometrica/django-multisite
|
|
216
|
+
.. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
|
|
217
|
+
.. _Public Suffix List: http://publicsuffix.org/
|
|
226
218
|
|
|
227
219
|
.. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg
|
|
228
220
|
:target: https://pypi.python.org/pypi/django-multisite2
|
django-multisite2-2.0.0/README.rst → django_multisite2-2.1.0/django_multisite2.egg-info/PKG-INFO
RENAMED
|
@@ -1,15 +1,65 @@
|
|
|
1
|
-
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: django-multisite2
|
|
3
|
+
Version: 2.1.0
|
|
4
|
+
Summary: Serve multiple sites from a single Django application
|
|
5
|
+
Author-email: Leonid S Shestera <leonid@shestera.ru>
|
|
6
|
+
Maintainer-email: Erik van Widenfelt <ew2789@gmail.com>
|
|
7
|
+
License-Expression: GPL-3.0-or-later
|
|
8
|
+
Project-URL: Homepage, http://github.com/erikvw/django-multisite2
|
|
9
|
+
Project-URL: Documentation, http://github.com/erikvw/django-multisite2/blob/develop/README.rst
|
|
10
|
+
Project-URL: Repository, http://github.com/erikvw/django-multisite2.git
|
|
11
|
+
Project-URL: Changelog, http://github.com/erikvw/django-multisite2/blob/main/CHANGES
|
|
12
|
+
Keywords: django,nginx,edc,clinical trials,research,data management,gunicorn,deployment
|
|
13
|
+
Classifier: Environment :: Web Environment
|
|
14
|
+
Classifier: Framework :: Django
|
|
15
|
+
Classifier: Framework :: Django :: 5.2
|
|
16
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
17
|
+
Classifier: Intended Audience :: Developers
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Requires-Python: >=3.12
|
|
23
|
+
Description-Content-Type: text/x-rst
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: tldextract
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Requires-Dist: coverage; extra == "test"
|
|
28
|
+
Requires-Dist: mock; extra == "test"
|
|
29
|
+
Requires-Dist: tox; extra == "test"
|
|
30
|
+
Requires-Dist: pluggy; extra == "test"
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
|
|
33
|
+
|pypi| |actions| |codecov| |downloads| |maintainability| |black|
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
django_multisite2
|
|
38
|
+
=================
|
|
39
|
+
|
|
40
|
+
With ``django_multisite2`` a single instance of a Django project can serve multiple sites using a single settings file (multi-tenant). The current ``SITE_ID`` is extracted from the URL.
|
|
41
|
+
|
|
42
|
+
In ``settings``, the static ``SITE_ID`` is replaced with ``django_multisite2`` dynamic ``SiteID``::
|
|
43
|
+
|
|
44
|
+
# settings.py
|
|
45
|
+
SITE_ID = SiteID(default=1)
|
|
2
46
|
|
|
47
|
+
the dynamic ``SiteID`` behaves like an integer. When combined with ``django_multisite2`` middleware, ``SiteID`` will return the current ``SITE_ID`` based on the url. For example, each url below is an alias of the same server instance. With ``django_multisite2`` you might have something like this::
|
|
3
48
|
|
|
49
|
+
# https://harare.example.com
|
|
50
|
+
>>> from django.conf import settings
|
|
51
|
+
>>> settings.SITE_ID
|
|
52
|
+
10
|
|
4
53
|
|
|
5
|
-
|
|
6
|
-
|
|
54
|
+
# https://kampala.example.com
|
|
55
|
+
>>> from django.conf import settings
|
|
56
|
+
>>> settings.SITE_ID
|
|
57
|
+
20
|
|
7
58
|
|
|
8
|
-
Python 3.11+ Django 4.2+
|
|
9
59
|
|
|
10
|
-
|
|
60
|
+
Python 3.11+ Django 4.2+. New releases are cut from the ``main`` branch.
|
|
11
61
|
|
|
12
|
-
|
|
62
|
+
Older versions of Django are supported by the original `django-multisite`_ project.
|
|
13
63
|
|
|
14
64
|
|
|
15
65
|
Installation
|
|
@@ -19,7 +69,7 @@ Install with pip:
|
|
|
19
69
|
|
|
20
70
|
.. code-block::
|
|
21
71
|
|
|
22
|
-
pip install django-multisite2
|
|
72
|
+
pip install django-multisite2
|
|
23
73
|
|
|
24
74
|
|
|
25
75
|
Replace your ``SITE_ID`` in ``settings.py`` to:
|
|
@@ -102,6 +152,9 @@ settings.py::
|
|
|
102
152
|
|
|
103
153
|
Templates
|
|
104
154
|
---------
|
|
155
|
+
|
|
156
|
+
This feature has been removed in version 2.0.0.
|
|
157
|
+
|
|
105
158
|
If required, create template subdirectories for domain level templates (in a
|
|
106
159
|
location specified in settings.TEMPLATES['DIRS'].
|
|
107
160
|
|
|
@@ -117,12 +170,10 @@ optional MULTISITE_DEFAULT_TEMPLATE_DIR setting, e.g.::
|
|
|
117
170
|
templates/multisite_templates
|
|
118
171
|
|
|
119
172
|
|
|
120
|
-
Cross-domain
|
|
121
|
-
|
|
173
|
+
Cross-domain cookie support
|
|
174
|
+
---------------------------
|
|
122
175
|
|
|
123
|
-
In order to support `cross-domain cookies`_,
|
|
124
|
-
for purposes like single-sign-on,
|
|
125
|
-
prepend the following to the top of
|
|
176
|
+
In order to support `cross-domain cookies`_ , for purposes like single-sign-on, prepend the following to the top of
|
|
126
177
|
settings.py MIDDLEWARE (MIDDLEWARE_CLASSES for Django < 1.10)::
|
|
127
178
|
|
|
128
179
|
MIDDLEWARE = (
|
|
@@ -151,8 +202,6 @@ run::
|
|
|
151
202
|
|
|
152
203
|
manage.py update_public_suffix_list
|
|
153
204
|
|
|
154
|
-
.. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
|
|
155
|
-
.. _Public Suffix List: http://publicsuffix.org/
|
|
156
205
|
|
|
157
206
|
Post-migrate signal: post_migrate_sync_alias
|
|
158
207
|
--------------------------------------------
|
|
@@ -195,7 +244,9 @@ To run the tests::
|
|
|
195
244
|
|
|
196
245
|
python runtests.py
|
|
197
246
|
|
|
198
|
-
|
|
247
|
+
.. _django-multisite: https://github.com/ecometrica/django-multisite
|
|
248
|
+
.. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
|
|
249
|
+
.. _Public Suffix List: http://publicsuffix.org/
|
|
199
250
|
|
|
200
251
|
.. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg
|
|
201
252
|
:target: https://pypi.python.org/pypi/django-multisite2
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
.coveragerc
|
|
2
|
+
.flake8
|
|
3
|
+
.gitignore
|
|
4
|
+
.pre-commit-config.yaml
|
|
5
|
+
.yamllint
|
|
6
|
+
AUTHORS
|
|
7
|
+
CHANGES
|
|
8
|
+
LICENSE
|
|
9
|
+
MANIFEST.in
|
|
10
|
+
README.rst
|
|
11
|
+
pyproject.toml
|
|
12
|
+
runtests.py
|
|
13
|
+
.github/dependabot.yml
|
|
14
|
+
.github/workflows/build.yml
|
|
15
|
+
django_multisite2.egg-info/PKG-INFO
|
|
16
|
+
django_multisite2.egg-info/SOURCES.txt
|
|
17
|
+
django_multisite2.egg-info/dependency_links.txt
|
|
18
|
+
django_multisite2.egg-info/requires.txt
|
|
19
|
+
django_multisite2.egg-info/top_level.txt
|
|
20
|
+
multisite/__init__.py
|
|
21
|
+
multisite/apps.py
|
|
22
|
+
multisite/exceptions.py
|
|
23
|
+
multisite/forms.py
|
|
24
|
+
multisite/hacks.py
|
|
25
|
+
multisite/threadlocals.py
|
|
26
|
+
multisite/utils.py
|
|
27
|
+
multisite/__pycache__/__init__.cpython-312.pyc
|
|
28
|
+
multisite/__pycache__/apps.cpython-312.pyc
|
|
29
|
+
multisite/__pycache__/exceptions.cpython-312.pyc
|
|
30
|
+
multisite/__pycache__/forms.cpython-312.pyc
|
|
31
|
+
multisite/__pycache__/hacks.cpython-312.pyc
|
|
32
|
+
multisite/__pycache__/threadlocals.cpython-312.pyc
|
|
33
|
+
multisite/__pycache__/utils.cpython-312.pyc
|
|
34
|
+
multisite/admin/__init__.py
|
|
35
|
+
multisite/admin/alias_admin.py
|
|
36
|
+
multisite/admin/multisite_changelist.py
|
|
37
|
+
multisite/admin/multisite_model_admin.py
|
|
38
|
+
multisite/admin/__pycache__/__init__.cpython-312.pyc
|
|
39
|
+
multisite/admin/__pycache__/alias_admin.cpython-312.pyc
|
|
40
|
+
multisite/admin/__pycache__/multisite_changelist.cpython-312.pyc
|
|
41
|
+
multisite/admin/__pycache__/multisite_model_admin.cpython-312.pyc
|
|
42
|
+
multisite/management/__init__.py
|
|
43
|
+
multisite/management/__pycache__/__init__.cpython-312.pyc
|
|
44
|
+
multisite/management/commands/__init__.py
|
|
45
|
+
multisite/management/commands/update_public_suffix_list.py
|
|
46
|
+
multisite/management/commands/__pycache__/__init__.cpython-312.pyc
|
|
47
|
+
multisite/management/commands/__pycache__/update_public_suffix_list.cpython-312.pyc
|
|
48
|
+
multisite/middleware/__init__.py
|
|
49
|
+
multisite/middleware/cookie_domain_middleware.py
|
|
50
|
+
multisite/middleware/dynamic_site_middleware.py
|
|
51
|
+
multisite/middleware/__pycache__/__init__.cpython-312.pyc
|
|
52
|
+
multisite/middleware/__pycache__/cookie_domain_middleware.cpython-312.pyc
|
|
53
|
+
multisite/middleware/__pycache__/dynamic_site_middleware.cpython-312.pyc
|
|
54
|
+
multisite/migrations/0001_initial.py
|
|
55
|
+
multisite/migrations/0002_alter_alias_id_alter_alias_is_canonical.py
|
|
56
|
+
multisite/migrations/0003_alter_alias_options_alter_alias_unique_together_and_more.py
|
|
57
|
+
multisite/migrations/0004_alter_alias_managers.py
|
|
58
|
+
multisite/migrations/__init__.py
|
|
59
|
+
multisite/migrations/__pycache__/0001_initial.cpython-312.pyc
|
|
60
|
+
multisite/migrations/__pycache__/0002_alter_alias_id_alter_alias_is_canonical.cpython-312.pyc
|
|
61
|
+
multisite/migrations/__pycache__/0003_alter_alias_options_alter_alias_unique_together_and_more.cpython-312.pyc
|
|
62
|
+
multisite/migrations/__pycache__/0004_alter_alias_managers.cpython-312.pyc
|
|
63
|
+
multisite/migrations/__pycache__/__init__.cpython-312.pyc
|
|
64
|
+
multisite/models/__init__.py
|
|
65
|
+
multisite/models/alias.py
|
|
66
|
+
multisite/models/managers.py
|
|
67
|
+
multisite/models/signals.py
|
|
68
|
+
multisite/models/validators.py
|
|
69
|
+
multisite/models/__pycache__/__init__.cpython-312.pyc
|
|
70
|
+
multisite/models/__pycache__/alias.cpython-312.pyc
|
|
71
|
+
multisite/models/__pycache__/managers.cpython-312.pyc
|
|
72
|
+
multisite/models/__pycache__/signals.cpython-312.pyc
|
|
73
|
+
multisite/models/__pycache__/validators.cpython-312.pyc
|
|
74
|
+
multisite/tests/__init__.py
|
|
75
|
+
multisite/tests/get_test_allowed_hosts.py
|
|
76
|
+
multisite/tests/get_test_http_response.py
|
|
77
|
+
multisite/tests/hosts.py
|
|
78
|
+
multisite/tests/test_settings.py
|
|
79
|
+
multisite/tests/__pycache__/__init__.cpython-312.pyc
|
|
80
|
+
multisite/tests/__pycache__/get_test_allowed_hosts.cpython-312.pyc
|
|
81
|
+
multisite/tests/__pycache__/get_test_http_response.cpython-312.pyc
|
|
82
|
+
multisite/tests/__pycache__/test_settings.cpython-312.pyc
|
|
83
|
+
multisite/tests/tests/__init__.py
|
|
84
|
+
multisite/tests/tests/request_factory.py
|
|
85
|
+
multisite/tests/tests/test_alias.py
|
|
86
|
+
multisite/tests/tests/test_contrib_site.py
|
|
87
|
+
multisite/tests/tests/test_cookie_domain_middleware.py
|
|
88
|
+
multisite/tests/tests/test_dynamic_site_middleware.py
|
|
89
|
+
multisite/tests/tests/test_site_cache.py
|
|
90
|
+
multisite/tests/tests/test_site_domain.py
|
|
91
|
+
multisite/tests/tests/test_site_id.py
|
|
92
|
+
multisite/tests/tests/test_template_loader.py
|
|
93
|
+
multisite/tests/tests/__pycache__/__init__.cpython-312.pyc
|
|
94
|
+
multisite/tests/tests/__pycache__/request_factory.cpython-312.pyc
|
|
95
|
+
multisite/tests/tests/__pycache__/test_alias.cpython-312.pyc
|
|
96
|
+
multisite/tests/tests/__pycache__/test_contrib_site.cpython-312.pyc
|
|
97
|
+
multisite/tests/tests/__pycache__/test_cookie_domain_middleware.cpython-312.pyc
|
|
98
|
+
multisite/tests/tests/__pycache__/test_dynamic_site_middleware.cpython-312.pyc
|
|
99
|
+
multisite/tests/tests/__pycache__/test_site_cache.cpython-312.pyc
|
|
100
|
+
multisite/tests/tests/__pycache__/test_site_domain.cpython-312.pyc
|
|
101
|
+
multisite/tests/tests/__pycache__/test_site_id.cpython-312.pyc
|
|
102
|
+
multisite/tests/tests/__pycache__/test_template_loader.cpython-312.pyc
|
|
103
|
+
multisite_app/__init__.py
|
|
104
|
+
multisite_app/apps.py
|
|
105
|
+
multisite_app/urls.py
|
|
106
|
+
multisite_app/views.py
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|