【问题标题】:Error in creating HTML form using Python-CGI使用 Python-CGI 创建 HTML 表单时出错
【发布时间】:2010-06-20 00:15:28
【问题描述】:

我必须创建一个 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

我不知道出了什么问题。任何帮助将不胜感激!

【问题讨论】:

  • 因为您显然是 Python 新手,所以在尝试深入研究 Web 编程(如 Dive into Python、Learning Python 或 Python for Dummies)之前,我会阅读一本关于一般 Python 编程的书。另外,如果我是你,我会使用完整的基于 WSGI 的 Web 框架,例如 Django 或 Flask,而不是 CGI。编程 CGI 很痛苦(相信我,我已经尝试过了)。如果您使用基于 WSGI 的框架,则更容易维护并且您可以在更多环境中运行您的应用程序。 CGI 在 Python 世界中几乎要走出来了。如果 CGI 是唯一可用的,您可以从 CGI 脚本运行 WSGI 应用程序。

标签: python apache cgi forms


【解决方案1】:

至少在您刚刚展示的内容中,存在语法错误:

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(或任何你的 Web 服务器)似乎没有帮助——cgitb 在整个脚本被成功解析之前无法控制,所以语法错误是它无法显示的原因之一!

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

您为什么不在命令行中使用python yourscript.py 运行它,直到您没有语法错误,然后才然后再次尝试将其作为CGI 运行?

例如在修复了我之前发现的两个错误但不是我刚刚发现的两个错误之后,您会看到(如果 python 在 PATH 上并且 shell 提示符是 $):

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

因为上一行末尾缺少",而第6行缺少冒号。

修复最后两个错误(您最初发布的代码中总共有四个)您终于看到了:

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


<h1> Error!Wrong!</h1>

当然它说“错误”,因为字段存储是空的,但这表明您现在可以(已修复所有四个错误)明智地尝试最终将其作为 CGI 脚本运行;-)

【讨论】:

  • 我收到以下错误消息(更正语法后):内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员 admin@host-PC.laptop 并告知他们错误发生的时间,以及您所做的任何可能导致错误的事情。服务器错误日志中可能会提供有关此错误的更多信息。
  • @shubster,还有两个语法错误(您最初发布的代码中总共有四个),请参阅我的回答编辑——修复所有四个语法错误应该最终让它运行。同样在我的 A 编辑中,您会看到为什么我知道它们必须是 syntax 错误的解释(否则 cgitb 被启用,将能够向您显示回溯)以及如何诊断语法错误在您的 CGI 脚本中,通过在命令行将其作为 普通 脚本运行(因为您的服务器在显示错误回溯方面没有帮助;-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
相关资源
最近更新 更多