单一安装,多个域名和应用程序?
单一安装,多个域名和应用程序?
我计划在一个多站点项目中使用Django,每个站点大部分是独立的,但有一些模型会在所有站点之间共享。
我想知道是否有办法使每个Django的'app'成为自己的站点,拥有独特的域名,并且仍然允许每个站点访问一个包含一些用户账户、个人资料等模型的共享app。
计划是通过共享app实现单点登录到每个站点,共享账户信息,并在用户登录后为每个站点创建cookie。
我知道Django有一个'sites'功能,但我不确定它是否足够强大以满足我的需求。
有人能否推荐一种方法来实现这个,或者指引我参考哪些文章?
更新
我在想,通过apache,可能可以通过修改urls.py来将某个域名指向一个URL结构吗?
例如,假设主站点是mainsite.com,我想让其中一个其他域名指向mainsite.com/secondarysite,其中secondarysite是同一实例中的一个Django app,并且让apache掩盖secondarysite.com实际上指向不同位置的事实。
单个安装,多个域名和应用程序的问题可能出现的原因是,有时候需要在同一个安装中管理多个域名和应用程序。这可能是因为我们需要在一个平台上管理多个相关的网站或应用程序,或者是为了方便集中管理和维护。
解决这个问题的方法是使用OpenID。OpenID是一个开放的身份验证协议,允许用户使用一个身份验证凭证登录多个不同的网站或应用程序。通过使用OpenID,我们可以在单个安装中支持多个域名和应用程序,以及实现跨域认证。
以下是使用OpenID解决单个安装、多个域名和应用程序问题的示例代码:
from django.contrib.auth.decorators import login_required from django.http import HttpResponseRedirect from django.conf import settings from openid.consumer.consumer import Consumer from openid.consumer.discover import DiscoveryFailure from openid.extensions import ax def openid_login(request): openid_url = request.POST.get('openid_url') consumer = Consumer(request.session, openid_url) try: auth_request = consumer.begin(openid_url) ax_request = ax.FetchRequest() ax_request.add(ax.AttrInfo('http://axschema.org/contact/email', required=True)) auth_request.addExtension(ax_request) redirect_url = auth_request.redirectURL( request.build_absolute_uri(reverse('openid_complete'))) return HttpResponseRedirect(redirect_url) except DiscoveryFailure: return HttpResponseRedirect(reverse('openid_login')) @login_required def openid_complete(request): consumer = Consumer(request.session) try: response = consumer.complete(request.GET) if response.status == 'success': email = response.extensionResponse( 'http://axschema.org/contact/email') # 处理用户登录成功后的逻辑 else: # 处理用户登录失败的逻辑 except: # 处理异常情况的逻辑
通过上述代码,我们可以实现单个安装中的多域名和应用程序的管理。用户可以通过OpenID进行登录,然后在单个安装中使用多个域名和应用程序。
,使用OpenID是解决单个安装、多个域名和应用程序问题的一种有效方法。通过这种方式,我们可以在单个平台上管理和维护多个相关的网站或应用程序。
单个安装、多个域名和应用程序是一个常见的需求。这种需求的出现可能是因为想要在不同的域名下运行多个应用程序,并且希望每个域名都有自己的URL结构和数据库配置。解决这个问题的方法是使用基于名称的虚拟主机(name-based virtual hosting)和mod_wsgi配置。每个虚拟主机可以通过不同的wsgi脚本来调用,每个脚本可以通过设置os.environ['DJANGO_SETTINGS_MODULE']指向不同的settings文件来配置不同的URL结构和数据库。如果想要两个域名共享同一个数据库,可以让两个settings文件都加载来自第三个文件(例如settings_shared.py)的数据库配置。如果只想将某些模型路由到共享数据库,可以在每个域名的settings文件中进行配置。这种方法解决了配置URL和数据库的问题,但是并没有解决单点登录(Single Sign-On,SSO)的问题。关于SSO部分,可以通过搜索"Django SSO"来了解相关的解决方案和问题。以下是一些相关的问题链接:Implementing Single Sign On (SSO) using Django, How to build a secure Django single signon between different sites?, Django + Google SSO openid, Integrating Django and .Net applications using Single Sign On (SSO), (Django) Sharing authentication across two sites that are on different domains。