我正在尝试用 HTML 和 Python(使用 CGI)设计和实现一个基本计算器。下面给出的是一个静态 HTML 网页,它被重定向到一个 python 脚本 (calci.py),我可以在其中计算总和,但无法将结果附加到“输出”文本框。
calculator.html
<html>
<head>
<title>Calculator</title>
</head>
<body>
<form action="python_scripts/calci.py" method="post">
Input 1 : <input type="text" name="input1"/><br>
Input 2 : <input type="text" name="input2"/><br>
<input type="submit" value="+" title="add" /><br>
output : <input type="text" name="output"/><br>
</form>
</body>
</html>
钙化.py
import cgi
form = cgi.FieldStorage()
input1 = form.getvalue('input1')
input2 = form.getvalue('input2')
output = str(int(input1)+int(input2))
#how to return the response to the html
#and append it to the textbox
谢谢
最佳答案
这不是 Web 应用程序的工作方式 - 至少不是简单的方式。 如果您的应用程序只想依赖浏览器和纯 HTML,则每个请求都必须将整个 html 页面作为字符串发送。您必须使用 Python 的字符串格式化功能将结果数字放在 HTML 表单中的正确位置。
这种工作方式是典型的“Web 1.0”应用程序(与大约十年前使用的“Web 2.0”术语相反)。 现代 Web 应用程序使用在客户端运行的逻辑,在 Javascript 代码中,发出 HTTP 请求以仅检索所需的数据 - 而且它们,此客户端逻辑会将您的结果放在页面中的正确位置,而无需重新加载这一页。这就是通常所说的“ajax”。它并没有那么复杂,但是应用程序的 html + javascript 端变得更加复杂。
我认为在采用“Ajax 方式”之前,应该真正理解“Web 1.0”方式。在您的情况下,假设您的包含计算器表单的 HTML 位于名为“calc.html”的文件中。在它里面,结果应该在的地方,放置一个可以被 Python 内置的原生字符串格式化方法理解的标记,比如 {result}
-
<html>
<body>
...
calculator body
...
Answer: <input type="text" readonly="true" value={result} />
</body>
</html>
然后像这样重写你的代码:
import cgi
form = cgi.FieldStorage()
input1 = form.getvalue('input1')
input2 = form.getvalue('input2')
result = int(input1)+int(input2)
html = open("calc.html".read())
header = "Content-Type: text/html; charset=UTF-8\n\n"
output = header + html.format(result=result)
print (output)
CGI 方式已经过时,但很适合学习:它依赖于您正在运行的整个程序,以及它打印到标准输出的任何内容都将被重定向到 HTTP 请求作为响应。这包括上面以最小形式包含的 HTTP header 。
(我将保留原始“{result}”字符串不显示在初始计算器表单中的方法的完整实现,作为您从 0 开始的练习 - 路径是获取初始计算器 html 模板也通过 CGI 脚本,而不是静态地,(也可能是相同的)- 只需用“0”或空字符串填充“结果”)
关于python - 如何使用 cgi python 脚本发送对 html 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364526/