如何在Django之外访问Django DB和ORM

时间:2014-06-02 03:41:46

标签: python django orm

所以在业余时间,我一直在开发一种网络监控软件,基本上可以安装在一堆客户端上,客户端将数据报告回服务器(RAM / CPU /存储/网络使用情况,等等)。对于管理控制台和报告,我决定使用Django,这本身就是一种学习经验。

Client以异步方式向Server报告,无论他们碰巧拥有什么数据(截至目前,它只是收到并转储,而不是存储在数据库中)。我需要在Django中访问这些数据。我已经创建了符合我需求的模型。但是,我不知道如何安全地将实际数据导入django DB。

这样做的方法是什么?我想到了一些选择,但它们都有一些缺点:

  1. 为Django应用程序提供对Server的引用,然后启动一个不断检查新数据并将其写入数据库的线程。
  2. Server直接访问Django DB,并在那里写入数据。
  3. 1的问题在于我将服务器与django应用程序紧密结合,但好处是我可以使用ORM很好地编写数据。

    2的问题在于我无法使用ORM来写入数据,我不确定在某些情况下它是否会导致数据库阻塞。

    我缺少一些明显的好选择吗?如果这个问题含糊不清,我很抱歉。我对Django很新,而且我不想把自己写进一个角落。

2 个答案:

答案 0 :(得分:1)

我在设置环境时选择了1选项,其中包含大部分相同的内容。

我有一个JSON接口,用于将数据传回服务器。由于我是在一个受到良好保护的VLAN上,因此效果很好。像你说的那样,最大的好处是Django ORM。只需要一个简单的地址调用和适当的数据。我也认为这是最简单的方法。

"阻止数据库"问题应该不存在。我想这将取决于数据库后端,但实际上,这是数据库的好处之一。例如,基于文件的单线程sqlite实例可能无法正常工作。

我尽可能地把事情放在Django中。这也有助于数据库安全性/完整性,因为它只能在一个地方访问。如果您的客户直接访问数据库,则您需要发送Client的用户名/密码。

我的建议是与1一起使用。它将使您的生活更轻松,代码更少。此外,只要您正确编码Client,就可以轻松地在以后修改数据库访问。

答案 1 :(得分:1)

设置消息总线(请参阅celery)。

每次客户端需要记录某些内容时,它都会在队列中提交消息。在你的django方面,你有一个管理工人的经纪人。

代理监视队列中的消息,触发工作人员处理消息,然后让工作人员重新进入休眠状态。

工作人员更新数据库。

通过这种方式,您不必处理连续线程(导致许多令人头疼的问题),只需添加到消息处理管道,您的架构就可以轻松扩展以处理多个客户端。