具有子域的Django上的多个PostgreSQL模式和用户

时间:2010-11-05 11:11:07

标签: django postgresql subdomain

我在多站点和多主机Django上看到了各种问题,包括子域和每个子域的特定架构。我没有看到的是一个解决方案(或提示,所以我可以编写一个)来解决这个问题。

  1. 我在网站上使用Django + PostgreSQL,比方说myapp.com
  2. 主网站myapp.com用于注册公司
  3. 注册公司获得自己的子域名company.myapp.com,并从那里登录并开始工作。
  4. 我这样做的想法是在PostgreSQL中制作2个初始模式。

    1. 公司和用户的架构“auth”
    2. 模式“empty_company_template”包含公司的基本表,全部为空,但连接到正确的序列等。
    3. 当一家新公司注册时,我希望这种情况发生:

      1. 为公司创建新架构,派生自empty_company_template
      2. 为公司创建一个新的数据库用户,名为company(公司名称)
      3. 将此新用户的搜索路径设置为company,auth(无权访问empty_company_template,无权访问其他用户架构)
      4. 对我来说,这似乎比现有解决方案更好,所有解决方案似乎都依赖于整个应用程序的单个数据库用户(可以访问所有方案)。但是,我很难让它发挥作用。这确实是一种可行的方法吗?谁能指出我正确的方向?这是Django,所以也许已经完成了,我还没有找到它?

2 个答案:

答案 0 :(得分:3)

我有一个可以解决除了单独用户之外的所有工作的解决方案。

这是确定子域的一小块中间件(只是process_request),并在数据库上执行SET search_path查询。这对我来说已经足够了。

对代码感兴趣的人,请联系我。我会在最后的时候将它发布到某个地方。

EDIT 2010年12月22日:

我在我的博客上发布了代码 http://blog.dyve.net/django-subdomains-and-postgresql-schemas

答案 1 :(得分:0)

如果您想拥有单独的数据库用户,您可能需要单独的Django实例,否则将无法获得安全性。该模型将需要更复杂的过程管理。我不认为你会找到这样一个应用程序的现成解决方案,所以你很可能不得不自己动手。否则,如果您不愿意投入大量时间,请坚持使用一个用户来完成整个应用程序。