我如何让我的用户将他们自己的自定义公式应用于数据表以派生新字段?
我正在研究 Django该应用程序将为开放网络上的订阅用户存储和处理大量数据。在一个页面请求中考虑 100-10,000 个传感器读数。我将使用这些数据绘制图表并显示包含它的表格。我希望传感器组由我的用户定义,他们将在我的网站上注册(即它们与 django 模型相对应)。
我想让用户能够创建从他们的传感器数据派生的字段(作为设置过程的一部分)。例如,用户可能知道他们的平均房屋温度是 (temperature sensor1 + temperature sensor2)/2 并且想在图表上显示它。他们可能还想要更有趣的东西,比如加热的太阳能热水是(温度输出 - 温度输入)* 流量 * 转换常数。然后,我将为他们和查看此传感器数据页面的其他所有人保存这些定义的公式。
主要问题是如何在系统的中心定义公式。我是否只有一个用户定义的字符串来定义公式(比如 100 个字符长)并自己解析它 - 用输入样本替换用户定义的字符串并将其称为 toast?
更新
最后我得到了我想要的答案:一种评估服务器上存储的用户函数的安全方法。在定义函数时也在客户端上评估相同的函数将是使 UI 直观的好方法。
最佳答案
取决于您的客户是谁。
如果这是在 WWW 上“向公众开放”,您必须自己解析表达式。您可以使用 Python 编译器来编译 Python 语法。您还可以为 Python 语法的子集发明自己的编译器。有很多例子;从 ply 开始项目。
如果这是内部的(“在防火墙后面”),让发布一段 Python 代码并执行该代码。
给他们一个环境from math import *
功能可用。
围绕他们提供的代码行折叠以下内容:
def userFunc( col1, col2, col3, ... ):
result1= {{ their code goes here }}
return result1
然后你可以执行函数定义并使用定义的函数而不会发生坏事。
虽然有些人喜欢吹嘘 exec
是“安全问题”,但它与用户共享密码、管理员故意做一些愚蠢的事情(如删除重要文件或关闭电源)一样是安全问题在您的程序运行时随机。
exec
只有在您允许任何人访问时才会出现安全问题。对于内部应用程序,您了解用户。培训他们。
关于python - Django 中用户定义的派生数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/847201/