Получение входных данных из метода PUT в Web.py - PullRequest
1 голос
/ 30 сентября 2011

Я использую следующий код в своей серверной программе:

class AddLibSong:
  def PUT(self):
  db = MahData.getDBConnection()
  songs = json.loads(web.input().to_add)
  addToLibrary(songs)
  return

Но по какой-то причине, когда я делаю PUT с данными:

"to_add=[ { "album" : "Unknonwn", "artist" : "Unknonwn", "host_lib_id" : "1", "is_deleted" :
"false", "server_lib_id" : "-1", "song" : "Moneytalks" } ]" 

я получаю следующееошибка:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/web/application.py", line 237, in process
    return self.handle()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/web/application.py", line 228, in handle
    return self._delegate(fn, self.fvars, args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/web/application.py", line 409, in _delegate
    return handle_class(cls)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/web/application.py", line 385, in handle_class
    return tocall(*args)
  File "/Users/kurtis/sandbox/udj/webserver/Library.py", line 114, in PUT
    song = json.loads(web.input().to_add)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/web/utils.py", line 76, in __getattr__
    raise AttributeError, k
AttributeError: 'to_add'

127.0.0.1:51096 - - [29/Sep/2011 19:02:58] "HTTP/1.1 PUT /add_songs_to_library" - 500 Internal Server Error

Кто-нибудь знает, почему это так?Мне кажется, я видел что-то в Web.py, которое начало получать информацию только при наличии POST или GET, но я не увидел ничего в исходном коде, которое могло бы предотвратить это.

1 Ответ

1 голос
/ 21 ноября 2011

В любом случае, если вы хотите больше узнать о том, как использовать PUT с WebPy, я бы посоветовал вам эту отличную ссылку.

Чтобы это работало в последней версии webpy, вы должны изменить "основной" код на:

if __name__ == "__main__":

    app=web.application(urls, globals())
    app.run()
...