【问题标题】:How should I set up and deploy my django project that spans over multiple subdomains and multiple databases?我应该如何设置和部署跨越多个子域和多个数据库的 django 项目?
【发布时间】:2012-07-08 08:23:38
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: django apache hosting wsgi multiple-databases


    【解决方案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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢!但是在 Django 中这样做的最佳实践是什么?
      • 一个用于所有站点的 settings.py 文件。所有站点的一个虚拟主机。每个网店一个数据库。
      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 2010-10-21
      • 2021-11-17
      • 2017-01-30
      • 2022-10-01
      • 2021-11-13
      相关资源
      最近更新 更多