【发布时间】:2019-12-10 08:01:13
【问题描述】:
我正在尝试使用 AJAX 请求处理 Python 脚本。我在 Flask 上渲染我的网页。当我不使用 Flask 时,我的解决方案在我的本地计算机上运行,但自从我移植到 Flask 以在 Azure 上部署后,我开始遇到问题。
我的目标是将 home.html 页面上的表单中的“country”和“rate”传递给“script.py”文件。 “script.py”利用这些变量并打印出一个静态 HTML 响应,然后应该在我的 HTML 页面的“result”div 标签中进行更新。
这是我的 Flask application.py 文件:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def home():
return render_template('home.html')
if __name__ == "__main__":
app.run(debug=True)
我的 AJAX 请求:
function python_process() {
var rate = $('input[name=rate]').val();
var country = $('select[name=country]').val();
$.ajax({
url: "/static/script.py",
type: "POST",
data: {
"rate" : rate,
"country": country
},
success: function(data){
var result = $('<div>').append(data);
$('#result').html(result);
},
error: function(){
console.log('in error');
}
});
};
我尝试过的事情:
- 试图让我的 script.py 文件成为它自己的 Flask 方法,但是脚本太大并且在我尝试时总是给我一个服务器错误。
- 尝试在 AJAX 成功调用中控制台打印“数据”变量,但默认控制台日志始终显示“错误”。
【问题讨论】:
-
你不能这样做。 Url
/static/script.py指向烧瓶,烧瓶尝试将其内容作为普通文件(即图像、.css 等)发送。它不会执行它。您必须向烧瓶中的某些功能发送请求,并且烧瓶必须执行它。并且烧瓶必须像任何其他模板一样将其结果提供给客户端。 -
您可以尝试使用模块
subprocess在烧瓶中运行script.py并捕获输出。 -
@furas 在这种情况下我会在哪里调用子流程?而且这也不允许我将任何变量从我的 HTML 表单传递给 script.py
-
你必须在 Flask 中使用 ie 创建函数。
@app.route('/scipt')并在此函数内部运行subprocess。 AJAX 将运行 url/script。这是普通的烧瓶函数,因此它可以从 AJAX 获取参数。而subprocess可以运行"script.py arg1 arg2 arg3"