Seite 1 von 1

GET und POST in Formularen mit SPYCE?

Verfasst: Mittwoch 2. März 2005, 11:09
von Morpheus1510
Hallo,

ich habe ein kleines Problem mit SPYCE:

Auf Wunsch habe ich auf einem Kundenserver SPYCE installiert. Funktioniert eigentlich auch, jedoch gibt es wohl ein Problem mit der POST-Methode in Formularen. GET funktioniert einwandfrei...

Hier erstmal der Link zum Bespielscript aus der SPYCE-Doku:
http://web200.freespace4all.de/docs/exa ... etpost.spy

Die POST-Methode fabriziert folgenden Fehler:
Spyce exception
File: /var/www/web200/html/docs/examples/getpost.spy
Message: TypeError: iterable argument required

Stack: getpost.spy:27, in (main):
=request.post1('name')

/usr/share/spyce/modules/request.py:143, in post1:
self._postInit()

/usr/share/spyce/modules/request.py:112, in _postInit:
self._postfields = cgi.FieldStorage(fp=self._api.getRequest(), environ=self.env(), keep_blank_values=1)

/usr/lib/python2.3/cgi.py:442, in __init__:
if 'REQUEST_METHOD' in environ:
Da ich nicht wirklich der Python-Guru bin, hoffe ich mal, dass mir hier vielleicht jemand einen kleinen Hinweis geben kann, wo ich schrauben darf.

Falls wichtig, hier die Serverkonfig:

Debian 3.0 woody
Apache 1.3.33
mod_python 2.7.10
Python 2.4.1
SPYCE 1.3.12

Re: GET und POST in Formularen mit SPYCE?

Verfasst: Mittwoch 2. März 2005, 13:08
von Leonidas
Ich nehme an, es liegt an einem Konfigurationsproblem beim Server, denn bei mir geht das beispiel wunderbar.
Morpheus1510 hat geschrieben:Debian 3.0 woody
Apache 1.3.33
mod_python 2.7.10
Python 2.4.1
SPYCE 1.3.12
Debian 3.1 Sarge
Apache 2.0.52
mod_python 3.1.3
Python 2.3.5
Spyce 1.3.12

Woher hast du Python 2.4.1, wenn 2.4.0 das neueste ist? CVS?

Re: GET und POST in Formularen mit SPYCE?

Verfasst: Mittwoch 2. März 2005, 13:36
von Gast
Leonidas hat geschrieben: Woher hast du Python 2.4.1, wenn 2.4.0 das neueste ist? CVS?
Debian-Standardpaket aus der testing... Genaue Versionsnummer (-V): 2.4.1a0, läuft aber nur als Alternativsystem... Ansonsten läuft noch 2.3.5, hiermit entsteht allerdings der gleiche Fehler.

Verfasst: Mittwoch 2. März 2005, 13:42
von Leonidas
Versuch nochmal das Beispiel aus der aktuellen Spyce Doku mit copy & paste nochmal zu kopieren...

Verfasst: Mittwoch 2. März 2005, 13:52
von Morpheus1510
Ups... da hatte ich wohl vergessen, mich einzuloggen ;-)
Also... Beispiel nochmal neu kopiert, keine Änderung. Ich denke, ich werde im Laufe des Tages mal SPYCE 1.3.13 auf den Server packen und dann sehen wir mal weiter...

Verfasst: Mittwoch 2. März 2005, 20:30
von fs111
Die request-Klasse unterstützt auch __getitem__, due kannst also auch request['foo'] machen. Der guckt in den POST und GET-Variablen nach, muss also nie angepasst werden, wenn man mal was von POST auf GET umstellt.

fs111

Verfasst: Donnerstag 3. März 2005, 08:32
von Morpheus1510
Hallo,

auch nach einem Update auf 3.1.13 gab es keine Besserung meines Problems. Allerdings bin ich hartnäckig und hab die Lösung gefunden. Für alle, die vielleicht mal vor demselben Problem stehen:

Der Fehler liegt in 'spyceUtil.py', dort muss folgender Block geändert werden

Code: Alles auswählen

###############################################
# Return hashtable value, or entire hashtable
#

def extractValue(hash, key, default=None):
  """Extract value from dictionary, if it exists. 
  If key is none, return entire dictionary"""
  if key==None: return hash
  if hash.has_key(key): return hash[key]
  return default

###############################################
muss so aussehen:

Code: Alles auswählen

###############################################
# Return hashtable value, or entire hashtable
#

def extractValue(hash, key, default=None):
  """Extract value from dictionary, if it exists.
  If key is none, return entire dictionary"""
  if key==None:
    if isinstance(hash, dict): return hash
    else: return dict(hash)
  if hash.has_key(key): return hash[key]
  return default

###############################################
Funktioniert bestens :-)