Django 如何在一个 Django 项目上管理不同的子域?
How does Django manage different subdomains on one Django project?
我希望我的 Django 项目可以在许多不同的端点上访问。对于一个应用程序,我希望它可以在 app.domain.com
访问,对于另一个应用程序,我希望它可以在 dashboard.domain.com
访问。我怎样才能做到这一点?我正在使用 AWS Elastic Beanstalk 和 Route 53。
我试着查看 Django 的 djangoproject.com and their Github repo,因为他们这样做。但是,我想不通。谢谢!
您可以定义两个 settings.py
文件,以及两个关联的 urls.py
文件:
app_settings.py
from my_project.settings import *
ROOT_URLCONF = 'my_project.app_urls'
ALLOWED_HOSTS = ['app.domain.com']
dashboard_settings.py
from my_project.settings import *
ROOT_URLCONF = 'my_project.dashboard_urls'
ALLOWED_HOSTS = ['dashboard.domain.com']
分别在 my_project/app_urls.py
和 my_project/dashboard_urls.py
中定义每个网站的 url
然后使用这两个不同的设置文件(例如使用 DJANGO_SETTINGS_MODULE
环境变量)启动您的 django 项目的两个实例(使用 uwsgi、gunicorn 或任何您使用的)。
这样,两个实例共享相同的代码库但公开不同的 url。
例如,使用 uwsgi,您可以拥有这两个文件(具有不同的端口):
app.ini
[uwsgi]
http = 127.0.0.1:8001
module = my_project.wsgi
processes = 4
threads = 2
pidfile = app.pid
env = DJANGO_SETTINGS_MODULE=my_project.app_settings
dashboard.ini
[uwsgi]
http = 127.0.0.1:8002
module = my_project.wsgi
processes = 4
threads = 2
pidfile = app.pid
env = DJANGO_SETTINGS_MODULE=my_project.dashboard_settings
我希望我的 Django 项目可以在许多不同的端点上访问。对于一个应用程序,我希望它可以在 app.domain.com
访问,对于另一个应用程序,我希望它可以在 dashboard.domain.com
访问。我怎样才能做到这一点?我正在使用 AWS Elastic Beanstalk 和 Route 53。
我试着查看 Django 的 djangoproject.com and their Github repo,因为他们这样做。但是,我想不通。谢谢!
您可以定义两个 settings.py
文件,以及两个关联的 urls.py
文件:
app_settings.py
from my_project.settings import *
ROOT_URLCONF = 'my_project.app_urls'
ALLOWED_HOSTS = ['app.domain.com']
dashboard_settings.py
from my_project.settings import *
ROOT_URLCONF = 'my_project.dashboard_urls'
ALLOWED_HOSTS = ['dashboard.domain.com']
分别在 my_project/app_urls.py
和 my_project/dashboard_urls.py
然后使用这两个不同的设置文件(例如使用 DJANGO_SETTINGS_MODULE
环境变量)启动您的 django 项目的两个实例(使用 uwsgi、gunicorn 或任何您使用的)。
这样,两个实例共享相同的代码库但公开不同的 url。
例如,使用 uwsgi,您可以拥有这两个文件(具有不同的端口):
app.ini
[uwsgi]
http = 127.0.0.1:8001
module = my_project.wsgi
processes = 4
threads = 2
pidfile = app.pid
env = DJANGO_SETTINGS_MODULE=my_project.app_settings
dashboard.ini
[uwsgi]
http = 127.0.0.1:8002
module = my_project.wsgi
processes = 4
threads = 2
pidfile = app.pid
env = DJANGO_SETTINGS_MODULE=my_project.dashboard_settings