【问题标题】:Django, Models and multiple databasesDjango、模型和多个数据库
【发布时间】:2013-04-25 01:57:47
【问题描述】:

Python version: 2.7 & Django version: 1.5.1

我目前正在为phpbb3 开发一个后端应用程序。我们当前在PHP 中的实现占用了太多资源。

我已经完成了大约 90%,但是在配置方面我遇到了一个小问题。

我们有多个论坛需要运行脚本,每个论坛都有自己的数据库,例如 site1、site2 和 site3 数据库。 Django 也有自己的数据库。

我需要做的是根据每个站点和站点上的论坛为我的脚本指定设置。所以我需要获取 site1 上存在的论坛,然后在管理面板中他们可以选择站点 1 并选择一个论坛并从那里选择他们的配置。然后他们可以选择站点 2,并从站点 2 中选择一个论坛,然后设置他们的数据。

我不想为我们正在运行的每个站点创建一个 django 站点,并且我希望尽可能轻松地添加一个新站点,但我不反对为每个站点创建一个新应用程序,如果这就是我们所需要的?

从另一个数据库中动态提取论坛并将其与站点值相关联并为该论坛提供配置模型的最佳方法是什么? (我不希望他们能够选择存在于另一个站点上的论坛)

【问题讨论】:

  • 您能否提供更多关于您使用 django 设置 phpbb 的详细信息?
  • @lalit 您还想了解哪些信息?有多个使用 PHPBB 设置的站点,它们都有自己的数据库名称,因此 site1 有一个名为 site1 的数据库,里面有所有标准 phpbb_ 前缀的标准 phpp 论坛。 django 站点是在它自己的数据库下设置的。我需要一个管理页面,让我选择/创建一个站点,然后从该站点中提取正确的数据库并为 phpbb 数据库中存在的每个论坛提供正确的论坛模型和设置配置。
  • 谢谢@user1189764,所以为了更具体的功能,你想实现以下几点:不同站点的不同数据库,一起访问django和phpbb数据库的方式以及一个管理界面来选择一个站点和对应的数据库。
  • @lalit 是的。能够将设置应用于该站点/数据库。

标签: database django django-models multiple-databases


【解决方案1】:

这里有一些指针,使用它们可以实现上述功能:

1.不同 Django 站点的不同数据库。

您可以找到一个相关问题here,它解释了如何为Database 设置custom router

2。 django和phpbb数据库一起访问的方式。

有一个可用的Github 项目here,它可能会对您有所帮助。

3.用于选择站点、相应数据库和应用设置的管理界面。

对此最简单的选择是将您的设置转储到 DictionaryFile 或两者的组合中,并根据您的站点 ID 为该特定站点选择该字典中存在的设置。

老实说,我觉得你在这里不需要Admin Inteface。但是,如果有任何我不知道的要求,那么您可以编写一个简单的视图来处理上述事情并从管理面板提供其访问权限。

希望这能解决您的问题。

【讨论】:

  • 我什至无法测试或处理最后一部分,因为第一部分(编号 1)完全错误。尝试使用他们的方法时,我会左右出错。例如,根据他们的设置,它不起作用,所以我将它移动到它自己的文件并在 django 设置中引用它,路由器会注册,但会失败。然后我从 django.conf 导入设置添加,但是从 django.contrib.sites.models 导入站点添加,所以它可以加载站点名称失败说 ImproperlyConfigured: Error importing database router CustomDatabaseRouter: "cannot import name connection"
  • 好的。我让第一部分工作(据说),但我仍然遇到其他问题。我正在尝试设置管理页面,但我真的很困惑如何设置它。我不认为/不知道内部站点框架是否会起作用,因为我没有在超过 1 个站点上运行 django 项目。 django 项目只有一个域,并且只能从该域访问,所以我不确定如何关联站点变量而不从不同的域访问它。我也不确定如何将模块与不同的站点关联
  • 您好,我想我对您的要求有点不清楚。您想根据管理面板中的选择在同一个 django 项目和站点下使用不同的论坛和数据库吗?
  • 是的,这就是我希望实现的目标。
  • 在这种情况下,将数据存储到字典或文件中可能没有意义,因为一次只能使用一个论坛和数据库。相反,将这些东西保存在数据库表中,其中每条记录都会告诉您特定论坛所需的配置/设置(论坛、数据库或脚本)。如果论坛当前处于激活状态,您可能还需要一个标志类型的字段(列)“is_active”来定义。
猜你喜欢
  • 2013-09-04
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
相关资源
最近更新 更多