django数据库根据部分域名动态选择

时间:2014-08-04 05:23:05

标签: python django wsgi

我正在创建一个对许多小公司有用的Django项目。如果他们可以点击我公共页面上的“创建演示”按钮,为Django项目创建一个空数据库,我希望如此。

所以,我希望能够转到http://example.com/demo_ahttp://example.com/demo_b,但在Apache配置文件中只有一个条目。

<VirtualHost *:80>
    ServerName example.com
    WSGIScriptAlias / /var/www/example/mysite.wsgi

    <Directory var/www/example>
            Order allow,deny
            Allow from all
    </Directory>
</VirtualHost>

每次我想创建一个演示站点时,我真的不想进入http.conf文件。所以,如果他们必须去http://example.com/demo_a(例如),我就没事了。

我不清楚如何将“demo_a”与数据库关联起来。有数据库路由器的东西和网站的东西,但我不知道如何根据URL的某些部分选择数据库(或“网站”)(例如,“demo_a”)。

另一方面,我将S3中的静态文件存储在动态确定的目录中,以便我认为我可以处理静态文件。

这一切对于进行负载平衡也很有用。

我是Django这个级别的新手。有任何想法吗?它似乎应该工作,只是不确定如何实现它。

1 个答案:

答案 0 :(得分:0)

您遇到的问题不是新问题,而是任何人创建任何多租户软件的常见问题;或开发软件即服务应用程序。

有关与此类架构相关的数据挑战的更详细分析,我强烈建议您阅读this excellent article from 2006 from MSDN

django-tenant-schemas application提供了视图路由,以便将域正确路由到各自的数据库:

  

通过主机名(即tenant.domain.com)识别租户。   此信息存储在公共模式的表中。每当一个   请求发出后,主机名用于匹配租户   数据库。如果匹配,则更新搜索路径以使用此选项   租户的架构。因此,从现在开始,所有查询都将在   租户的架构。例如,假设您有一个租户客户   http://customer.example.com。来自的任何请求   customer.example.com将自动使用客户的架构并制作   租户可应要求提供。如果没有找到租户,则为404   提出错误。这也意味着你应该有一个房客   主域,通常使用公共架构。