我刚接触烧瓶编程,所以如果我的问题很幼稚,我会道歉,但我似乎无法弄清楚我确信这是一个简单的想法。
我正在尝试创建一个输入,您可以在其中输入字符串,并将其转换为函数。因此,如果有人输入2 * x + 5,我可以创建f(x)= 2 * x +5
这是我到目前为止所做的:
@app.route('/test1')
def test2():
return render_template("template_test.html")
@app.route('/test1', methods = ['POST'])
def test2_post():
text = request.form['text']
def f(x):
return text
return f(10)
答案 0 :(得分:1)
比使用eval
更安全:您可以使用将解析数学表达式的库 - 添加额外奖励,如果输入不是有效的数学表达式,您可以向输入它的用户提供有意义的错误消息。请参阅Evaluating a mathematical expression in a string - 特别是this answer,它提供了一个可以像这样使用的手动解析器:
def test2_post():
text = request.form['text']
nsp = NumericStringParser()
nsp.set_variable('x', 10) # you'll have to implement this method
result = nsp.eval(text)
return(result)
关键答案之上和之外的一件事是提供一种设置变量的方法。您必须扩展该答案中给出的代码 - 我的建议是在NumericStringParser
对象中保留变量和值的字典。 set_variable
函数设置该字典中的值,并在解析器中添加一个字母数字标记,该标记将转换为变量和值字典中的相应值。
如果您以前没有使用过编写解析器的问题,那么这个问题的范围有点超出我提供详细信息的范围 - 但我鼓励您花几分钟时间来研究它,它并不可怕看起来似乎。
为什么要这么麻烦:如果这是针对您正在撰写的网络应用,那么您可以安全eval
用户输入的情况非常少 - 这几乎绝对是一个坏主意。这是一种执行任意数学表达式的方法,没有使用eval
的安全风险。
答案 1 :(得分:0)
虽然这不是特定于烧瓶的,但在python中,可以使用{{1}}来完成在字符串中执行代码;但是,使用它通常被认为是不好的做法(特别是在Web服务器环境中),因为它是一种非常容易被利用的安全风险。