2010-05-06 29 views
3

此問題可能令人尷尬地變得簡單。cgi.FieldStorage始終爲空 - 永遠不會返回POST形式的數據

我想給python一個旋轉。我認爲開始這樣做的一個好方法是創建一個簡單的cgi腳本來處理一些表單數據並做一些魔術。我的python腳本由apache使用mod_python正確執行,並且會打印出我希望打印出來的任何內容。

我唯一的問題是,cgi.FieldStorage()始終爲空。我試過使用POST和GET。每個試驗我填寫兩個表單域。

<form action="pythonScript.py" method="POST" name="ARGH"> 
<input name="TaskName" type="text" /> 
<input name="TaskNumber" type="text" /> 
<input type="submit" /> 
</form> 

如果我改變的形式指向它正確地報告形式數據的Perl腳本。 python頁面總是給我相同的結果:鍵數:0

#!/usr/bin/python 

    import cgi 

    def index(req): 

      pageContent = """<html><head><title>A page from""" 
      pageContent += """Python</title></head><body>""" 
      form = cgi.FieldStorage() 
      keys = form.keys() 
      keys.sort() 
      pageContent += "<br />number of keys: "+str(len(keys)) 
      for key in keys: 
        pageContent += fieldStorage[ key ].value 
      pageContent += """</body></html>""" 
      return pageContent 

我使用Python 2.5.2和Apache/2.2.3。這是什麼在我的Apache的conf文件(我的劇本是在/ var/WWW /蟒蛇):

<Directory /var/www/python/> 
     Options FollowSymLinks +ExecCGI 
     Order allow,deny 
     allow from all 
     AddHandler mod_python .py 
     PythonHandler mod_python.publisher 
    </Directory> 
+0

你如何提交?你的表格沒有提交按鈕:) – extraneon 2010-05-06 13:34:20

+0

哈 - 好點!簡化此問題的表單時,我無意中刪除了提交。謝謝。 – 2010-05-06 13:36:08

回答

6

您的問題是,你混合兩種不同的方法:CGI和mod_python。您將腳本聲明爲mod_python發佈者,這就是爲什麼它的index方法被調用的原因 - 這也使它成爲一個模塊,而不是腳本。

如果您使用CGI,你會從你的Apache配置中刪除mod_python的指令,只是離開ExecCGI,並請重命名腳本有.cgi擴展或設置處理程序.py擴展是CGI,以及。然後您的腳本將作爲腳本執行,這意味着您在腳本中定義的index函數將不會被執行,除非您從腳本的頂層調用它。

我記得 - 但是我已經很長時間了,因爲我對mod_python感到困擾 - 如果你想使用mod_python,你應該使用mod_python.util.FieldStorage而不是cgi.FieldStorage來訪問POST數據。

所有這一切說,對於裸機網絡資料一更好的選擇是WSGI,例如通過mod_wsgi。而且通常比裸機網頁內容更好的選擇是使用Web框架,像DjangoTurboGearsPylons,或上市,例如許多人之一,web frameworks page on wiki.python.org

+2

添加到Thomas的響應中,如果使用mod_python.publisher,則POST數據已使用req.form中保留的FieldStorage對象處理。如果您接受index()函數中的參數,則命名的表單參數將以相同名稱的參數傳遞。因此,您根本不必擔心FieldStorage。請參閱'http://webpython.codepoint.net/mod_python_publisher_form'。 – 2010-05-07 01:32:45

+0

謝謝!這很有道理。我沒有遇到有關mod_python.publisher存儲req.form中的表單數據的細節 - 這真的很有幫助! 對於我目前的小實驗,使用wsgi並沒有什麼意義,但我一定會在將來看到它。再次感謝你的幫助! – 2010-05-07 13:04:10

相關問題