使用Python-CGI创建HTML表单时出错
我需要创建一个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
语句的缩进要比控制它们的 if
和 else
关键字更深一些。
如果你修正了这些语法错误再试一次,你在浏览器中到底看到了什么?如果你使用浏览器的“查看源代码”功能,又会看到什么呢?
编辑:
还有一个语法错误:第二个 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 脚本运行了;-)