我有一个html页面custom.html和一个python脚本test.py(均在下面截屏)。 html页面上只有一个按钮,该按钮应触发python脚本以打印一行(在我的下一个python脚本中,我希望它做更多的事情,但这是我的起点)。
在Chrome的开发人员工具下,单击按钮后,我会收到由jQuery引发的GET 404错误。对于从我的html按钮成功激活python脚本的任何建议,我们深表感谢。
我的test.py脚本很简单
print("Successful line print")
这是我的custom.html文档
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="../static/css/style2.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<pre>
</pre>
<body>
<div>
<div>
<button style="text-align: center; margin-bottom: 150px" class="search-btn" type="button" value=" Run Script " onclick="goPython()">Trigger Python
<script>
function goPython() {
$.ajax({
url: "../folder/test.py",
context: document.body
}).done(function() {
alert('finished python script');;
});
}
</script>
</button>
</div>
</div>
</body>
</html>
编辑:我将代码添加到Google App Engine处理URL调用和导入Flask所需的main.py脚本中。
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html')
@app.route("/learn.html")
def learn():
return render_template('learn.html')
@app.route("/custom.html")
def custom():
return render_template('custom.html')
if __name__ == "__main__":
app.run()
编辑2,尝试@Dustin Ingram的答案后:
这是我的custom.html中的新代码
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="../static/css/style2.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
<div>
<button style="text-align: center; margin-bottom: 150px" class="search-btn" type="button" value=" Run Script " onclick="goPython()">Click Here
<script>
function goPython() {
$.ajax({
url: "/trigger-python",
context: document.body
}).done(function() {
alert('finished python script');;
});
}
</script>
</button>
</div>
</div>
</body>
</html>
然后我做了一个简单的test.py,只是为了测试html按钮单击以激活python脚本的能力
from flask import Flask
app = Flask(__name__)
@app.route("/trigger-python")
def print_something():
print("Successful line print")
return 'OK'
print_something()
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
修复了AJAX中调用的URL后,单击按钮时仍然出现相同的404错误。下面是更新的Chrome开发者工具屏幕截图。
答案 0 :(得分:2)
您不能通过这样的AJAX请求调用Python脚本。您需要调用与Python Web应用程序的端点相对应的URL。
例如,在前端:
$.ajax({
url: "/do-something",
context: document.body
})
,然后在后端有一条对应的路由:
@app.route("/do-something")
def do_something():
print("Successful line print")
return 'OK'
有关在App Engine上开始使用Python网络应用程序的详细信息,请参见https://cloud.google.com/appengine/docs/standard/python3/quickstart。
编辑:这正是我已经测试并确认的作品:
app.yaml
:
runtime: python37
requirements.txt
:
Flask==1.1.2
main.py
:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/custom.html')
def custom():
return render_template('custom.html')
@app.route("/trigger-python")
def print_something():
print("Successful line print")
return 'OK'
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
templates/custom.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="../static/css/style2.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div>
<div>
<button style="text-align: center; margin-bottom: 150px" class="search-btn" type="button" value=" Run Script " onclick="goPython()">Click Here
<script>
function goPython() {
$.ajax({
url: "/trigger-python",
context: document.body
}).done(function() {
alert('finished python script');;
});
}
</script>
</button>
</div>
</div>
</body>
</html>
您可以看到它在这里工作:https://stackoverflow-61195723.uc.r.appspot.com/custom.html