我应该如何设置和部署跨越多个子域和多个数据库的django项目?

时间:2012-07-08 20:43:21

标签: django apache hosting wsgi multiple-databases

假设我正在构建一个支持网上商店的Django驱动网站,我们称之为webshop.com。我希望它能像这样工作:

一家名为Foo的商店想要一家网店。他们在webshop.com注册并创建了子域foo.webshop.com,以及数据库foo_DB。 Foo的所有者使用foo.webshop.com/admin上的管理界面输入他们的产品。然后,客户可以从foo.webshop.com购买产品。

商店酒吧有网店bar.webshop.com - 与webshop.com上托管的其他网上商店完全无关。等等。 webshop.com应该能够容纳100家商店。

问题是:我应该如何使用Django进行此操作?

起初我以为我应该为每个网店提供一个settings.py文件,一个虚拟服务器和一个数据库。但是我担心运行所有这些实例会产生过多的开销。

非常感谢任何指针或想法!

2 个答案:

答案 0 :(得分:1)

我已经构建了六个这样工作的应用程序(虽然在python中没有,但在这种情况下它确实无关紧要。)

从同一个虚拟主机提供服务。使用urlparse获取服务器名称一旦获得了要匹配的字符串,请在master数据库中查找与客户数据库匹配的数据库详细信息(即主机名,用户名,密码等)。确保在查询之前清理该值。

我认为您最好的选择是分离您的客户数据库。这不仅可以确保一个数据库问题不会导致所有客户站点崩溃,还可以将它们放在不同的服务器上。

答案 1 :(得分:1)

也许您可以使用django-sudomains https://github.com/tkaemming/django-subdomains/

这是一个为每个请求创建子域属性的中间件。

由于每个网站的功能相同,您可以根据所请求的sudomain查询产品。您还可以为用户分配子域。

所有观点都是相同的,除非他们会考虑这个子域名。使用1个共享数据库可以轻松实现此方法,其中每个模型都有一个指向子域的字段或一个子域为数据库naem的共享数据库。 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database-for-a-queryset