2012-07-09 44 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執行,因爲出於安全原因它可能被關閉。