在Django服务器中运行复杂计算(使用python/pandas)

在Django服务器中运行复杂计算(使用python/pandas),python,django,python-2.7,numpy,Python,Django,Python 2.7,Numpy,我使用python中的Django rest框架开发了一个RESTful API。我开发了所需的模型,对它们进行了序列化,设置了令牌身份验证和所有其他尽职调查 我还使用Angular构建了一个前端,托管在不同的域上。我设置CORS修改,以便根据需要访问API。一切似乎都很顺利 问题就在这里。我正在构建的web应用程序是一个金融应用程序,它应该允许用户在服务器上运行一些复杂的计算,并将结果发送到前端应用程序,以便将结果呈现为图表和其他格式。我不知道如何或在哪里进行这些计算 我选择Django作为后

我使用python中的Django rest框架开发了一个RESTful API。我开发了所需的模型,对它们进行了序列化,设置了令牌身份验证和所有其他尽职调查

我还使用Angular构建了一个前端,托管在不同的域上。我设置CORS修改,以便根据需要访问API。一切似乎都很顺利

问题就在这里。我正在构建的web应用程序是一个金融应用程序,它应该允许用户在服务器上运行一些复杂的计算,并将结果发送到前端应用程序,以便将结果呈现为图表和其他格式。我不知道如何或在哪里进行这些计算

我选择Django作为后端,因为我希望python能够帮助我在需要的地方运行这样的计算。基本上,当我在服务器上调用特定的api链接时,我希望能够从数据库中检索数据,如果需要,可以从多个表中检索数据,并使用这些数据使用python或python库(pandas或numpy)运行一些计算,并将计算结果作为对api调用的响应

如果这是一项艰巨的任务,我至少希望能够使用API将数据从表中检索到前端,使用JS稍微处理数据,并将其发送到服务器上的python函数,其中包含处理后的数据,该函数将运行必要的复杂计算,并以结果进行响应,这些结果将被呈现为图表/其他格式

有人能告诉我从这里出发的方向吗?我在网上寻找资源,但我想我找不到正确的关键字来搜索它们。我只需要一个shell代码,它可以集成到我当前的后台应用程序中,我可以使用它调用我编写的一些python脚本来运行这些计算


提前感谢。

我想你的问题是关于“我如何在django的restful框架中进行这些计算?”,但我认为在这种情况下,你需要远离这个想法

您所做的一切都是正确的,但是RESTful API服务于资源——基本上是您的模型

然而,计算并不是这样的。在我看来,你有两种方式来实现你想要的:

1) 编写一个表示计算结果的模型,该模型使用RESTful框架提供服务,因此您的计算是一种资源(如果将结果存储在数据库中作为缓存的方式,则可以很好地工作)

2) 将路由/端点添加到api中,以服务于该计算的结果

路径1:计算作为资源

创建一个模型,在实例化时处理计算。 您甚至可以为计算设置继承结构,并为计算模型实现接口

这样,当请求资源时,restful框架希望服务于该资源,计算结果将得到服务

路径2:自定义端点

为您的计算端点添加路由,如
/myapi/v1/taxes/compute

在该端点的底层控制器中,您将加载计算所需的模型,执行计算,并根据需要提供结果(可能是json响应)

您仍然可以使用上述继承结构实现计算。通过这种方式,您可以基于参数实例化计算对象(在上述情况下,
taxes


这能给你一个主意吗?

嘿。谢谢你的解释。它确实给了我一个如何继续的想法,但我对Python不够精通,无法做到这一点。我唯一使用Python的就是数据分析。无论如何,我会弄明白的。我认为我使用了太多框架的内置函数,并且过于严格地遵循教程,没有理解每件事的确切含义。但是,为了澄清一些事情,你认为我需要彻底改进我到目前为止所做的工作以实现你的建议,还是我可以将它们整合到现有的工作中?我想这听起来可能很幼稚。当前,在url.py中注册了一个API url,该url与serializers.py中存在的视图集相关联。此视图集调用一个序列化程序类,该类的元选项中附加了一个模型。此模型在models.py中定义。那么,在这个流程流中,我可以在哪里实现您关于使用自定义端点的建议呢?显然,我必须在url.py中注册端点。但除此之外,我只有一个模糊的想法,非常不清楚。你觉得你能帮我吗?@SrujanRouthu嘿,很抱歉这么晚才回复。你在正确的轨道上。如果仔细查看
url.py
,您会发现,当模式匹配时,将调用一个函数。这个函数可以在任何地方使用。因此,如果您愿意,您可以创建一个文件“
controllers.py
”,向其中添加一个函数,将其导入到url.py中,一旦您找到了正确的路由,就会调用它,为您提供一个请求对象!谢谢这消除了我心中的许多模糊。因此,在一个名为“
calculations.py
”的文件中,我将创建一组类和函数来运行我的计算。然后,我将按照您的建议创建“
controllers.py
”,其中我将为特定url创建一个控制器,运行一些查询集从数据库中提取数据,通过“
calculations.py
”中的一些函数运行这些数据,并将结果作为响应。这个流程有意义吗?另外,将
numpy
数组或
pandas
数据帧转换为可以服务的JSON对象是否会有困难?我不建议您在控制器中进行查询。您已经有了数据库模型,必须在其上运行计算,对吗?因此,控制器应该只获取模型并将其传递给能够执行cal的对象