假设我正在构建一个支持网上商店的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文件,一个虚拟服务器和一个数据库。但是我担心运行所有这些实例会产生过多的开销。
非常感谢任何指针或想法!
答案 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