单个安装,多个域名和应用?

6 投票
2 回答
845 浏览
提问于 2025-04-16 13:30

我打算用Django来做一个多站点项目,每个站点基本上是独立的,但会共享一些模型,比如用户账户、个人资料等。

我想知道有没有办法让每个Django的“应用”都成为一个独立的网站,拥有独特的域名,同时又能让每个网站访问一个公共的应用,这个公共应用里包含一些用户账户和个人资料的模型。

我的计划是实现单点登录,让用户在每个网站上都能使用同一个账户信息,并在用户登录后为每个网站创建cookies。

我知道Django有一个“站点”功能,但不确定这个功能是否足够强大,能满足我的需求。

有没有人能推荐一下实现这个功能的方法,或者指引我找一些相关的文章?

更新

我在想,是否可以通过apache,并可能需要对urls.py做一些修改,来把某个域名指向一个特定的URL结构?

比如说,假设主站是mainsite.com,我想让另一个域名指向mainsite.com/secondarysite,其中secondarysite是同一个实例中的一个Django应用,并且希望apache能隐藏secondarysite.com这个域名实际上指向的是不同的位置?

2 个回答

0

你可以考虑一下 OpenID 这个东西。

6

关于你的更新:你不需要那样伪造网址结构,除非你也想让像 mainsite.com/secondarysite 这样的链接直接对用户可用。

我假设你在使用 基于名称的虚拟主机。一种简单但非常灵活的方法是让每个 <VirtualHost> 指令调用不同的 wsgi 脚本,使用常规的 mod_wsgi 配置指令,然后每个 wsgi 脚本可以设置 os.environ['DJANGO_SETTINGS_MODULE'] 指向不同的设置文件。

这些设置文件可以有不同的 ROOT_URLCONF,这样你就可以根据需要在不同的路径上配置视图。可以利用 include 机制。

如果你想让两个域名都使用同一个数据库,只需让这两个设置文件从第三个文件加载数据库配置,比如 settings_shared.py。或者如果你想把一些模型路由到共享数据库,而其他模型不这样做,这也是可以的。可以想象如何为每个域名配置:

from settings_shared import DATABASES_SHARED
DATABASES = DATABASES_SHARED.copy()
DATABASES.update({ ... })

这种方法可以处理每个域名的 URL 和数据库配置。但它并没有解决单点登录的问题。

至于单点登录的部分,实际上取决于你想要什么样的用户体验以及你有多少时间;)

试着搜索“django sso”。这里有很多相关的问题,比如: 使用 Django 实现单点登录 (SSO)如何在不同网站之间建立安全的 Django 单点登录?Django + Google SSO openid使用单点登录 (SSO) 集成 Django 和 .Net 应用程序(Django) 在不同域名的两个网站之间共享认证

撰写回答