我正在尝试设计和实现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>
calci.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
由于
答案 0 :(得分:2)
这不是Web应用程序的工作方式 - 至少不是简单的。 如果您只想依赖浏览器和应用程序的纯HTML,每个请求都必须将整个 html页面作为字符串发送。您必须使用Python的字符串格式化功能将结果数字放在HTML表单中的正确位置。
这种工作方式是典型的&#34; Web 1.0&#34;应用程序(与大约十年前使用的&#34; Web 2.0&#34;术语相对)。 现代Web应用程序使用在客户端运行的逻辑(在Javascript代码中)来发出HTTP请求以仅检索所需的数据 - 而这些客户端逻辑会将您的结果放在页面中的适当位置,而无需重新加载这页纸。这就是通常所说的&#34; ajax&#34;。它并不复杂,但应用程序的html + javascript方面变得更加复杂。
我认为应该真正理解&#34; Web 1.0&#34;在做“阿贾克斯方式”之前的方式&#34;。在您的情况下,假设您的包含计算器表单的HTML位于名为&#34; calc.html&#34;的文件中。在其中,结果应该位于其中,放置一个可以通过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标头,它包含在上面的最小形式中。
(我将完全实现原始&#39; {result}&#39;字符串的方式,不要在初始计算器表单中显示为从0开始的练习 - 路径是通过CGI脚本获取初始计算器html模板,而不是静态地(也许是相同的) - 只需填充&#34;结果&#34;使用&#34; 0&#34;或空字符串)
答案 1 :(得分:0)
您可以在Java脚本的帮助下传输响应。 在print(“ window.location = url”)下使用