A Django middleware module to handle multiple domains.
Project description
Redesigned README for dj-multidomain
dj-multidomain
Dynamic Multi-Domain Middleware for Django
dj-multidomain is a powerful Django middleware that enables dynamic routing of
requests to different URL configurations based on the domain of
incoming requests.
It also supports automatic redirection for specific domains and provides
options for shared common URLs.
This middleware is ideal for projects hosted across multiple domains or
with subdomain-specific functionalities.
Developed by Ferhat Mousavi. ferhat.mousavi@gmail.com
Features
- Domain-Based URL Routing: Route requests to different URL configurations based on the domain.
- Subdomain Handling: Easily manage subdomains and inject subdomain data into requests.
- Automatic Redirects: Redirect specific domains to desired ones seamlessly.
- Shared URLs: Define common URLs accessible across all domains.
- Fallback Support: Set a default domain for unrecognized requests (DEBUG mode).
Installation
1. Install the Package
Install dj-multidomain using pip:
pip install dj-multidomain
Ensure publicsuffix2 is also installed:
pip install publicsuffix2
2. Add Middleware
In your settings.py, add the middleware to the MIDDLEWARE list:
MIDDLEWARE = [
...
'dj_multidomain.middleware.MultipleDomainMiddleware',
...
]
Configuration
1. Map Domains to URL Configurations
Use MULTI_DOMAIN_CONFIG to map domains to their respective URL configuration files. Add this to settings.py:
MULTI_DOMAIN_CONFIG = {
'example.com': 'project.urls_example_com',
'example.org': 'project.urls_example_org',
}
2. Redirect Domains (Optional)
If you want to redirect specific domains to others, use MULTI_REDIRECT_CONFIG:
MULTI_REDIRECT_CONFIG = {
'www.example.com': 'example.com',
'oldsite.org': 'newsite.org',
}
3. Add Common URLs (Optional)
Define shared URLs that are accessible from any domain using COMMON_URLS:
COMMON_URLS = 'project.urls_common'
4. Subdomain Configuration (Optional)
If subdomain data needs to be injected into requests, use MULTI_SUBDOMAIN_CONFIG to define parameter names:
MULTI_SUBDOMAIN_CONFIG = ['subdomain1', 'subdomain2']
5. Default Domain (Optional)
Set a fallback URL configuration for unrecognized domains (only active in DEBUG mode):
DEFAULT_DOMAIN = 'example.com'
Example Project Structure
Below is a typical project structure for dj-multidomain:
project/
├── project/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls_common.py
│ ├── urls_example_com.py
│ ├── urls_example_org.py
│ ├── views.py
├── manage.py
Example Usage
1. Domain-Specific URL Configuration
Create domain-specific URL files, e.g., urls_example_com.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about/', views.about, name='about'),
]
2. Common URL Configuration
Define shared URLs in urls_common.py:
from django.urls import path
from . import views
urlpatterns = [
path('contact/', views.contact, name='contact'),
]
3. Subdomain Handling
Subdomains will be available as attributes in the request object. For example:
def subdomain_example(request):
subdomain1 = getattr(request, 'subdomain1', None)
return HttpResponse(f"Subdomain 1: {subdomain1}")
Sample Configuration
Here’s a complete example of settings.py for dj-multidomain:
MIDDLEWARE = [
...
'dj_multidomain.middleware.MultipleDomainMiddleware',
...
]
MULTI_DOMAIN_CONFIG = {
'example.com': 'project.urls_example_com',
'example.org': 'project.urls_example_org',
}
MULTI_REDIRECT_CONFIG = {
'www.example.com': 'example.com',
}
MULTI_SUBDOMAIN_CONFIG = ['subdomain1', 'subdomain2']
COMMON_URLS = 'project.urls_common'
DEFAULT_DOMAIN = 'example.com'
Supported Versions
- Python: 3.10 and above
- Django: 4.0 and above
Sample Project
Explore a sample implementation:
GitHub: dj-multidomain Example
Contribution & Support
- For issues or feedback, open an issue in the GitHub repository.
- Contributions are welcome! Feel free to submit a pull request.
License
This project is licensed under the GNU General Public License v3 (GPLv3).
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dj_multidomain-0.4.0.tar.gz.
File metadata
- Download URL: dj_multidomain-0.4.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f4a75d381ae1c188f6b757d7f7c801c1d733bdbe8977663488f660c72afb4f4
|
|
| MD5 |
ae41247515e93313354303b97cf6c081
|
|
| BLAKE2b-256 |
4a2cbedd2006216a8b7ca387b3313f20495979d5d0b2cc5ac01c6ff06bc95e80
|
File details
Details for the file dj_multidomain-0.4.0-py3-none-any.whl.
File metadata
- Download URL: dj_multidomain-0.4.0-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a74011996fc208d663c1f8708f14b13f1f94040c51d44766bd0ce430e60b4efa
|
|
| MD5 |
5becff0518bb77bc25d8659d6430d330
|
|
| BLAKE2b-256 |
69a213579034e4d1f4a042822e93b941b50aecf4e1cccd53b75c710b9e07d15d
|