Django后端设计建议

时间:2015-04-20 20:50:41

标签: python django backend

我有一个我在工作中使用的工具,用python编写,我希望移植到Django框架中,以便更加无缝地编写基于Web的管理界面。我已经浏览了django教程,对如何使用自己的数据库(或数据库)编写基本的django应用程序非常了解。

我在这个特定项目中遇到的困境是我引用了多个数据源:

  1. 可能或可能不是SQL数据库,有些没有任何实现作为django后端(例如LDAP和Google Admin SDK)。
  2. 第三方数据源是整体"模型"可能会更改,恕不另行通知,我无法控制这个...虽然他们的模型的部分'我将访问的内容可能永远不会改变。
  3. 所以我的问题是:我是否应该将这些外部数据源视为django'模型'?或者我最好只编写一些单独的接口类来处理这些数据源?

    我可以看到写入新的数据库引擎的可能性。处理与这些数据源的通信所以从实际的应用程序实现我可以调用所有常用的方法,如我正在查询任何数据库。理想情况下,我正在编写的应用程序的核心不需要关心它连接到的每个数据源的实现细节 - 我想尽可能地将其作为可插拔的,因此未来新数据源类型的实现不会涉及如果对核心代码进行任何修改,那就多了

    我想知道这是否已被接受'这样做的方式 - 或者,如果对于这样的自定义情况,你可以使用django后端并只是实现自己的自定义解决方案来查询这些数据源中的信息。

    我希望这个问题足够清楚......如果没有,请问我所需要的具体内容。谢谢!

2 个答案:

答案 0 :(得分:1)

1)也许你应该考虑Flask web-framework,它不像Django那样依赖于特定的ORM。因此,您没有义务在Django ORM模型中使用您的数据。

2)你可以使用Django和一些自定义数据查询和操作工具,这完全可以。但是你应该知道,Djangos生态系统的主要部分与Django ORM有关,如果你放弃它,它将无法工作。

3)在Django模型中注意managed=False选项。它允许您拥有一个不受syncdbmigrate等命令管理的模型。它基本上意味着,底层表不在你的控制范围之内,Django不应该改变那个表并把它当作#34;"。

答案 1 :(得分:0)

所以我正在考虑这个问题,我想到的一个可能性是构建Django支持的数据库(在我的案例中为mysql),它代表我对这些数据源感兴趣的数据。

然后我可以覆盖查询/保存对mysql模型的更改的模型方法,以调用我编写的外部python类,直接与数据源和相应的mysql数据库进行交互。

因此,例如,在查询调用中,我可以覆盖django方法,并在调用super之前添加一个操作来检查mysql记录是否“陈旧” - 如果是这样,请在继续之前请求对它们进行更新。

在更新操作中,我可以追加(更新后更新到mysql表),这是一个请求外部类更新外部源的操作。

这是一种迂回的方式,但它确实允许我将应用程序本身保留在django框架内,并且如果将来模块很好地实现,可以为这些提供直接的后端接口来源,我可以很容易地用直接接口替换解决方法。

思考?批评?