使用Python-CGI创建HTML表单时出错

0 投票
1 回答
1574 浏览
提问于 2025-04-16 00:12

我需要创建一个HTML表单,并使用python-cgi来获取数据。这个HTML表单要求用户提交名字和姓氏,然后python脚本应该能够获取表单中生成的数据。我查阅了很多教程,也尝试过让它工作,但似乎一直没有成功。

这是我的HTML代码:

<form method = "POST" action ="http://localhost/cgi-bin/pyfile_test.py">
    <p>First Name: <input type="text" name="firstname">
    <p>Last Name: <input type="text" name="lastname">
    <p>Click here to submit the form:<input type="submit" value="Submit">
    <input type="hidden" name="session" value="1898fd">
    </form>

这是提取数据的python脚本:

#!c:/Python26/python.exe -u

import cgi, cgitb
cgitb.enable()

def main()
    print "Content-type: text/html\n"
    print
    form = cgi.FieldStorage()
    if form.has_key("firstname") amd form["firstname"].value !="":
    print "<h1>Hello", form["firstname"].value, "</h1>"
    else:
    print "<h1> Error!Wrong!</h1>
main()

当我把HTML表单指向上面的脚本时,它不工作,但指向下面的脚本时就能正常工作。

#!c:/Python26/python.exe -u

import cgi, cgitb
cgitb.enable()

print "Content-type: text/html"
print

print "The First Python Script On Server Side"
print "The sum of two numbers evaluation"
print "3+5 = ",3+5

我不知道哪里出错了。任何帮助都非常感谢!

1 个回答

0

在你刚刚展示的内容中,至少有一些语法错误:

if form.has_key("firstname") amd form["firstname"].value !="":
print "<h1>Hello", form["firstname"].value, "</h1>"
else:
print "<h1> Error!Wrong!</h1>

amd 应该改成 and,而且两个 print 语句的缩进要比控制它们的 ifelse 关键字更深一些。

如果你修正了这些语法错误再试一次,你在浏览器中到底看到了什么?如果你使用浏览器的“查看源代码”功能,又会看到什么呢?

编辑:

还有一个语法错误:第二个 print 语句缺少一个结束的 "。逐个找出你的语法错误真的很麻烦,而且 Apache(或者你用的其他网络服务器)似乎也没帮上忙——cgitb 只有在整个脚本成功解析后才能控制,所以语法错误是它无法显示的唯一原因!

还有一个:在 def main 这一行的末尾缺少冒号。

为什么不直接在命令行用 python yourscript.py 运行它,直到你修复了所有语法错误,然后再尝试作为 CGI 运行呢?

例如,修正了我之前发现的两个错误,但没有修正我刚刚发现的两个错误后,你会看到(假设 python 在路径中,命令行提示符是 $):

$ python acgi.py 
  File "acgi.py", line 6
    def main()
             ^
SyntaxError: invalid syntax

因为前一行缺少 " 和第六行缺少冒号。

修正了最后两个错误(你最初发布的代码总共有四个错误)后,你终于会看到:

$ python acgi.py 
Content-type: text/html


<h1> Error!Wrong!</h1>

当然它会显示“错误”,因为字段存储是空的,但这表明你现在(修复了所有四个错误后)可以合理地尝试将其作为 CGI 脚本运行了;-)

撰写回答