根据请求动态选择数据库

时间:2010-02-05 22:30:31

标签: python django

我正在尝试保持我的RESTful站点干,我无法想出一个很好的方法来分解代码,从每个“用户”的独立数据库中动态选择。我们为每个客户提供了一个单独的数据库。它作为URL的一部分出现,并作为关键字arg传递到每个视图中。我想给每个视图提供访问相应数据库的行为,而不必确保编写视图的每个程序员都记得使用

Thing.objects.using(user).all()

t = Thing()
t.save(using=user)

每一次。似乎应该有某种方法来拦截请求并根据视图设置默认数据库之前命中视图,允许我们使用通常的

Thing.objects.all()

这也有利于将所有用户解析代码分解到更合适的位置。

1 个答案:

答案 0 :(得分:1)

我们通过以下技术来做到这一点。

  1. Apache选择路径的第一部分并将其路由到特定的mod_wsgi守护程序。

  2. 每个mod_wsgi守护程序都是不同客户的安装。

  3. 我们有许多并行客户,每个客户都有(几乎)相同的代码,所有这些客户都基于一个基本软件的常见安装。

    每位客户都有一个独立的settings.py及其独特的配置。

    他们(实际上不能)彼此了解,因为Apache为我们剥离了路径的顶层。