从不同的数据库访问和共享django中多个站点之间的数据

时间:2010-07-29 07:03:29

标签: django

目前我有三个网站,例如让它为site1,site2和site3。每个站点都需要身份验site1和site2都使用相同的数据库,让它成为“Portfolio”数据库,而site3拥有一个不同的数据库,让它成为“site3specific”数据库。

我计划建立一个公共帐户数据库,用于保存所有不同站点的用户登录凭据。这样每个站点(即site1,site2和site3)将使用Common Account数据库来验证用户登录。我计划将用户详细信息保存在单独的数据库中,因为开发,测试和实时环境中的所有三个站点都可以共享相同的用户凭据而无需冗余。此外,每个站点都可能拥有我们可能拥有的特定数据,或者在开发,登台和实时环境中以不同方式输入。

此外,还有可能在网站之间共享一些数据。

有谁能告诉我如何在django + Apache + mod_wsgi中完成这些任务。

请告知我是否需要全局共享设置文件,模型文件和网址文件。如果那么我的全局共享设置文件需要如何修改。请指教。

3 个答案:

答案 0 :(得分:0)

这就是我们目前的运作方式。

每个网站在VirtualHost都有自己的httpd.conf条目,每个应用都有自己的django.wsgi配置文件,看起来像这样(你可以使用更简单的一个):

import os, sys, site, glob

prev_sys_path = list(sys.path) 

root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
site.addsitedir(glob.glob(os.path.join(root_dir, 'venv/lib/python*/site-packages'))[0])
sys.path.append('/usr/local/django-apps')
sys.path.append('/usr/local/django-apps/AppName')

new_sys_path = [] 
for item in list(sys.path): 
    if item not in prev_sys_path: 
        new_sys_path.append(item) 
        sys.path.remove(item) 
sys.path[:0] = new_sys_path

os.environ['DJANGO_SETTINGS_MODULE'] = 'AppName.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

VirtualHost需要包含以下条目:

    SetEnv DJANGO_ENV ${environment
    WSGIDaemonProcess appname user=apache group=apache processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup appname
    WSGIScriptAlias / /usr/local/django-apps/AppName/apache/django.wsgi
    <Directory /usr/local/django-apps/AppName/apache>
            Order deny,allow
    </Directory>

从那里开始,数据库设置取决于您正在使用的数据库引擎。

希望这有帮助。

答案 1 :(得分:0)

您必须查看您的要求,并查看是否所有站点都可能需要,如果是这样,请尊重单点登录(sso)服务。如果是这种情况,那么您可能需要查看会话如何在站点之间传输,因为会话特定于SITE_ID。所以,让它发挥作用可能是一个很好的开始,但在挖掘之前看一下大局可能是一个好主意。

答案 2 :(得分:0)

我在这些网站中设置了相同的会话名称(a.xx.com/b.xx.com/c.xx.com - &gt; sesssion name = xx.com)。在我的Django项目中,我为每个站点使用了三个设置文件,并使用manager.py来分隔这些站点。最后一步,单独启动它们。