使用CGI Python脚本如何向HTML发送响应

4
我将尝试在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

谢谢

2个回答

3
这不是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头部,以简化的形式包含在上面。
(我会留下一个完整的实现方式,让原始“{result}”字符串不会出现在初始计算器表单中,作为你的练习,从0开始-路径是通过CGI脚本获取初始计算器HTML模板,而不是静态地获取(也可能是相同的),并用“0”或空字符串填充“result”)

谢谢您的回复。您能否提供一些关于Web 2.0方式和Django Web服务器的学习参考资料? - karthik kumar

0

你可以使用 JavaScript 来传递响应。 在 print("window.location=url") 下使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接