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.pymy_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