1

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

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

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

问题是:我应该如何使用 Django 来做这件事?

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

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

4

2 回答 2

1

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

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

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

于 2012-07-08T20:51:26.297 回答
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

于 2012-07-08T22:26:08.300 回答