2016-12-09 7 views
1

Ich habe vor kurzem Webpy auf meinem Ubuntu-Rechner heruntergeladen, und ich habe derzeit Probleme mit seiner POST-Funktion. Hier ist mein Code:Webpy AttributeError 'Header-Schlüssel'

#! /usr/bin/env python 

import web,interface 

urls = (
    '/', 'index' 
) 

class index(object): 
    def POST(self): 
     data = web.input() 
     interface.interfaceModule(data.decider) 
    return "SENT TO INTERFACE" 


if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run() 

Schnittstelle ist nur eine andere Klasse, die die POST-Wert erhält, und sendet sie an einem Arduino über serielle. Hier

ist der Fehlerausgang:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/web/application.py", line  239, in process 
return self.handle() 
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 230, in handle 
    return self._delegate(fn, self.fvars, args) 
File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 462, in _delegate 
    return handle_class(cls) 
    File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 438, in handle_class 
    return tocall(*args) 
    File "/var/www/cgi-bin/index.py", line 12, in POST 
    interface.interfaceModule(data.decider) 
    File "/usr/local/lib/python2.7/dist-packages/web/utils.py", line 76, in _ _getattr__ 
    raise AttributeError, k 
AttributeError: 'decider' 

192.168.10.1:52225 - - [09/Dec/2016 19:41:09] "HTTP/1.1 POST /" - 500 Internal Server Error 

I die Post-Anforderung über das Chromium app gesendet: Post-MAN, mit dem angegebenen Schlüssel und einen beliebigen Wert.

+0

Sie 'data.decider' aber es scheint' data' nicht über Eigentum 'decider'. Benutze 'print (data, type (data), dir (data))', um zu sehen, was du in 'data' hast – furas

+0

@furus Ich habe versucht, den Objektwert vorher auszudrucken und ja, es ist leer:" ", wie für Geben Sie Folgendes ein: , und das Verzeichnis() zeigt kein Entscheiderattribut. Wie gehe ich vor, um das zu beheben? –

+0

bedeutet, dass Sie falsche Daten senden - Sie senden keine Werte. – furas

Antwort

1

Dieser Fehler bedeutet, dass Sie falsche Anfragen senden - Sie senden keine decider in Ihrem POST. Versuchen

import requests 

r = requests.post('http://localhost:8080', data={'decider':'Hello World'}) 

print(r.text) 
+0

Danke, es hat funktioniert! Ich sehe, was ich die ganze Zeit mit POST MAN und HttpRequest Browser-Plugins falsch gemacht habe –