我一直在阅读“Head First Python”一书,作者在书中谈到使用他创建的名为“yate”的模块创建动态网页,这是一个 HTML 模板引擎(我在下面的代码中将其重命名为 site_yate)。他举的例子是一位假想的教练希望他的运动员能够在线查看他们的时间。设计如下:首先你进入主页,它有一个链接来运行一个脚本,该脚本生成一个网页,你可以在其中选择你想要查看其时间的运动员。然后,当您选择运动员并单击提交时,表单会调用另一个名为“site_generate_timing_data.py”的脚本,您可以在其中查看运动员的最佳成绩。因此,我决定在我的 python 脚本中使用这行额外的代码,进一步并添加功能来为运动员增加时间。
print(site_yate.do_form("addtime.py", [athlete_id]))
这将生成的 HTML 将是这样的:
<form action="addtime.py" method="POST">
<h1>Want to add a time?</h1>
<input type="Text" name="1" size=40> //"1" is the athlete's id in this example
<input type="Submit" value="Submit">
</form>
如您所见,此代码调用脚本“addtime.py”,该脚本具有以下代码:
import cgi
import sqlite3
data = cgi.FieldStorage().value[0] #this attribute will be in the form MininFieldStorage(name, value)
id = data.name #this attribute is the input's name i.e. athlete's id
time = data.value #this attribute is the input's value i.e. the time
connection = sqlite3.connect("NUACDB.sqlite") #my DB's name
cursor = connection.cursor()
cursor.execute("""INSERT INTO timing_data (athlete_id, time)
VALUES (?, ?)""",
(id, time)) #just SQL stuff
connection.commit()
connection.close()
效果很好,但是我想对此做一些更改,因为它会让用户留在空白页面上。我可以生成一些 HTML 代码来提供指向主页等的链接,甚至可以生成 JavaScript 代码来自动重定向用户,但我想让这个脚本不含 HTML,这样我也可以在其他地方使用它。
我想做的是让脚本在同一页面上执行。不仅如此,我还希望可以将 addtime.py 代码作为一个函数放在另一个名为“athletemodel.py”的模块中,并从那里调用它,即 athletemodel.addtime()
(或者我可以执行 from athletemodel import addtime
这样我就可以直接调用该函数)。如何使用 HTML 代码调用 python 函数?我知道 onsubmit=""
表单属性,但显然这是针对 JavaScript 函数的。我不确定的另一件事是表单中提交的数据是否仍可通过 CGI FieldStorage 访问,因此我的 addtime.py 代码是否仍能按原样工作。
这东西太困惑了!感谢所有帮助。
最佳答案
不确定您是否已经想到它,但我会使用 ajax(记得包括 jQuery 库)。如果这是您想要的,这里有一个粗略的 示例,可以帮助您入门。它将使它们保持在同一页面上:
JavaScript 文件:
$('#submitButtonId').click(function (event) {
event.preventDefault();
$('#submitButtonId').hide();
$('#thinking').show(); //some div with a nice ajax loader gif...
$.ajax({
type: 'POST',
data: $('#formId').serialize(),
url: '/URL_path_to_function',
success: function (data) {
$('#loading').hide();
var response = data.result //now do stuff with your response
}
error: function(error){
console.log('Error')}
});
Python View /函数:
import jsonify
if request.method == 'POST':
value = request.form['input value'] #flask...
#Do stuff
return jsonify(result='Some response')
关于python - 如何使用表单调用 python 函数而不是脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503704/