cgi.FieldStorage immer leer - nie wieder Gepostet Formulardaten
Dieses problem ist wohl peinlich einfach.
Ich versuche zu geben, python spin. Ich dachte, ein guter Weg, zu tun beginnen, dass wäre ein einfaches cgi-Skript zur Verarbeitung in irgendeiner form Daten und etwas Magie. Mein python-Skript ausgeführt wird, ordnungsgemäß von apache mit mod_python, und drucken was ich will es ausdrucken.
Mein problem ist nur, dass cgi.FieldStorage() ist immer leer. Ich habe versucht, mit sowohl POST und GET. Jede Studie, die ich füllen Sie die Formularfelder aus.
<form action="pythonScript.py" method="POST" name="ARGH">
<input name="TaskName" type="text" />
<input name="TaskNumber" type="text" />
<input type="submit" />
</form>
Wenn ich das Formular ändern, zu einem Punkt perl-Skript meldet es die Daten des Formulars richtig. Die python-Seite gibt mir immer das gleiche Ergebnis: Anzahl der Tasten: 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
Ich bin mit Python 2.5.2 und Apache/2.2.3. Das ist es, was in meiner apache-conf-Datei (und mein Skript ist in /var/www/python):
<Directory /var/www/python/>
Options FollowSymLinks +ExecCGI
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
</Directory>
- Wie kann man Einsenden? Ihr Formular ohne submit-button 🙂
- Ha - guter Punkt! Ich versehentlich entfernt, die Sie übernehmen, wenn die Vereinfachung der form für diese Frage. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass Sie mischen zwei verschiedene Ansätze: CGI und mod_python. Erklären Sie Ihrem Skript als mod_python publisher, das ist, warum die
index
Methode aufgerufen wird -- und das macht es auch ein Modul, nicht in ein Skript.Wenn Sie wurden mit Hilfe von CGI, würden Sie entfernen Sie die mod_python-Direktiven aus der Apache-Konfiguration, lassen Sie einfach die ExecCGI, und benennen Sie das Skript, um die
.cgi
Erweiterung oder legen Sie die handler für die.py
Erweiterung zu CGI, wie gut. Dann ist dein script ausgeführt werden, da ein Skript, was bedeutet, dass dieindex
Funktion, die Sie in Ihrem Skript definiert würde nicht ausgeführt werden, es sei denn, Sie nannten es von dem obersten der Schrift.Soweit ich mich erinnere-aber es ist schon eine lange Zeit, da ich Mühe mit mod_python-wenn Sie möchten, verwenden Sie mod_python stattdessen sollten Sie mit Hilfe
mod_python.util.FieldStorage
stattcgi.FieldStorage
Zugriff auf die POST-Daten.Alles, was gesagt, ein viel bessere Wahl für eine bare-bones-web-Zeug ist WSGI, zum Beispiel durch mod_wsgi. Und in der Regel eine bessere Wahl als bare-bones-web-Stoff ist mit einem web-framework wie Django, TurboGears, Pylone, oder eine der vielen anderen aufgelistet werden, zum Beispiel, die web-frameworks Seite an wiki.python.org