gpt4 book ai didi

python - 如何使用 cgi python 脚本发送对 html 的响应

转载 作者:搜寻专家 更新时间:2023-10-31 08:29:50 24 4
gpt4 key购买 nike

我正在尝试用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com