2012-07-09 89 views
2

我有一个包含表单的html页面,我希望用户能够在表单中输入一些数据。然后我会用python脚本检索这些数据。检索本地html表单

我不明白如何使html和python进行通信。如何在用户点击后发现python检索表单?有一个基本的例子可以用来证明这一点吗?

回答

2

你需要的是一个HTTP服务器。 Python可以用来制作一个服务器,或者你可以得到一个如Apache或Lighttpd。我前段时间基于此写了一个示例应用程序(Rock,Paper,Scissors):https://dl.dropboxusercontent.com/u/95437705/RPS_Web.tgz

+0

此链接显示404页未找到错误。有更新的版本吗? – ChrisProsser 2013-09-17 14:45:21

+1

重新上传到Dropbox,现在应该没问题 – C0deH4cker 2013-09-18 01:54:14

1

C0deH4cker是正确的,您应该让您的python程序在某种Web服务器中运行。

为较大的项目执行此操作的正确方法是使用Web框架,如Django或Web2py。这些框架具有出色的文档和教程页面,非常值得花费。较小的好处是两者都有自己的内置Web服务器进行小型部署。

另一种方法是编写具有自己的Web服务器的Python代码。你可以看看Twisted,python的网络框架。好信息在http://twistedmatrix.com/documents/current/web/howto/web-in-60/index.html

最后 - 但这被认为有点过时了,我猜(??) - 有您描述的CGI选项。大多数Web服务器(如Apache和Lighttpd)都可以运行CGI脚本。 CGI脚本是非常简单的程序,它们以最简单的形式运行时,在其stdout上输出HTML代码。 Web服务器查看脚本中的第一个(“shebang”)行,以确定脚本解释器,执行脚本,拾取输出并通过HTTP提供输出。

CGI对参数传递做出了具体规定。在Python CGI模块,这些可获得通过cgi.FieldStorage()

首先对一些HTML:

一个HTML形式所具有的“动作”和“方法”属性。 Action是将要发送表单数据的URL(绝对或相对于当前路径);方法是使用的方法,通常用于提交按钮的表单是“POST”。

所以,如果你有这样的HTML代码运行的地方:

<html> 
<body> 
    <form name="sample" action="cgi-bin/myscript.cgi" method="post"> 
    Name: <input type="text" name="name"/> 
    <input type="submit" value="Submit"/> 
    </form> 
</body> 
</html> 

当用户按下提交按钮,所有的输入值都发布到URL“myprogram.cgi”。

关于CGI代码应该看起来像一个很好的文本是http://docs.python.org/library/cgi.html

一些代码,应该工作是:

import cgi 

print "Content-Type: text/html"  # HTML is following 
print        # blank line, end of headers 

print "<TITLE>CGI script output</TITLE>" 
print "<body>\n" 
print "<H1>This is my first CGI script</H1>" 
print "Hello, world!" 

form = cgi.FieldStorage() 
if "name" not in form: 
    print "<H1>Error</H1>" 
    print "Please fill in the name fields" 
else: 
    print "<p>name:", form["name"].value 
print "</body>" 

现在,你意识到你必须做出对从Web服务器指定的URL提供的代码是很重要的。你应该如何做到这一点取决于你的网络服务器。

在linux下的apache上,你通常会把脚本放在/ var/www/cgi-bin中。可能你应该在apache配置中启用cgi执行,因为出于安全原因它可能被关闭。