2011-09-07 59 views
6

我需要将我当前的Django应用程序拆分为两个网站。独立的Django网站与共同的认证/注册后端

网站A将包含面向公众的网站,该网站将包含所有静态页面和注册系统。

其他网站 - 网站B - 是注册用户的网站。他们也可以通过站点B登录到应用程序站点。

如果我没有弄错,我可以使用django.contrib.sites框架来完成拥有多个站点但可以拥有共同认证/注册后端的任务吗?

我该如何做到这一点?

谢谢。

+0

+1:从来没有这种情况,但始终是如何在我的django应用程序中使用多个网站的事情! –

回答

2

Django的django.contrib.sites如果两个站点都在相同的服务器上运行并访问相同的数据库,那么该框架很好。如果您拥有分布式应用程序(不同主机上的不同站点或不同数据库上的不同站点),则可以使用单点登录解决方案。

我使用OpenID与自定义提供程序集中登录运行在不同数据库上的应用程序。其他解决方案包括CASproviderconsumer)。

2

对于这种情况,则必须2个settings.py文件称为settings_A.py和settings_B.py它们指定from settings import *

A必须SITE = 1和B将具有SITE = B。那么你可以通过设置环境变量对每个虚拟主机DJANGO_SETTINGS_MODULE = settings_A并设置你的apache的configs这些文件DJANGO_SETTINGS_MODULE = settings_B

然后您设置contrib.sites应用程序绑定到相应的网站ID您的二级域名,并且您的网页将能够绑定到其中一个或两个网站。

最后,在settings_A.py settings_B.py中,您可以指定单独的urlconfs,也可以使用urlconfs中的use.Site来启用和禁用每个站点的URL组。

希望这有助于

编辑:为了澄清:只要你使用这两个网站之间的相同的数据库和SECRET_KEY,你可以在它们之间使用相同的用户账号了。如果这些网站的格式为example.com和private.example.com,那么将SESSION_COOKIE_DOMAIN设置为.example.com将允许会话在两个网站之间继续。

+0

嗨托马斯。这听起来合理。这是否意味着登录到站点A的人将能够登录到站点B?一个很好的例子是谷歌,如果你登录他们的主页,你可以访问你的Gmail,文档等。我需要实现类似的东西 - 跨域身份验证。谢谢。 –

+0

如果两个域共享一个根域,则您只能默认进行跨域自动登录。 domain.com,sitea.domain.com和siteb.domain.com。 (这就是为什么所有谷歌网站都使用google.com作为其基本域)。但是,您可以拥有一个可用于登录两个站点的User对象。对于完全不同的域之间的永久登录,请尝试以下方法:http://stackoverflow.com/questions/263010/whats-your-favorite-cross-domain-cookie-sharing-approach – Thomas

+0

如果你喜欢这个答案,你可以标记为正确? – Thomas

0

您可以对两个站点使用(外部)LDAP身份验证。您需要在两个站点都可以访问的地方使用LDAP服务器。我从来没有使用过这个,但我不知道它如何与Django auth集成。请参阅http://packages.python.org/django-auth-ldap/