2016-08-07 4 views
3

Я хочу создать службу REST, поэтому я попробовал, и вот мой сниппетНевозможно создать REST службы в питона

from bottle import route, run 

@route('/plot_graph',method='GET') 
def plot_graph(): 
    #compute graph_list (python object of type list) 
    #done 
    return graph_list 

if __name__ == "__main__": 
    run(host='0.0.0.0', port=8881, server='cherrypy', debug=True) 

Теперь, когда я ввожу это в браузере http://localhost:8881/plot_graph это дает ошибку

Error: 500 Internal Server Error 

Sorry, the requested URL 'http://localhost:8881/plot_graph' caused an error: 

Unsupported response type: <type 'int'> 

и моя консоль python говорит, что она прослушивает, но дает это предупреждение.

Bottle v0.12.9 server starting up (using CherryPyServer())... 
Listening on http://0.0.0.0:8881/ 
Hit Ctrl-C to quit. 

/Users/guru/python_projects/implement_LDA/lda/lib/python2.7/site-packages/bottle.py:2777: ImportWarning: Not importing directory '/Users/guru/python_projects/implement_LDA/lda/cherrypy': missing __init__.py 
    from cherrypy import wsgiserver 

Любые способы разрешить это?

+0

Я сделал все в виртуальном env – Guru

ответ

2

graph_list должен содержать строки, однако, похоже, что ваш список содержит целые числа. Вы можете преобразовать эти целые числа в строки с этим:

return (str(i) for i in graph_list) 

Но обратите внимание, что элементы списка соединяются вместе, которые не могли бы быть то, что вы хотите. Поэтому еще один вариант, чтобы вернуть словарь, который bottle преобразует в JSON, кодируемый ответ:

return {'val{}'.format(i): val for i, val in enumerate(graph_list, 1)} 

Это создает словарь, такой как {'val1': 1, 'val2': 2, 'val3': 2, 'val4': 5}.

Для предупреждения проблемы, похоже, что у вас есть каталог с именем cherrypy в том же каталоге, что и ваш основной скрипт python. Переименовать/удалить этот каталог и флакон импортирует CherryPy из вашего каталога сайтов. Или вы можете просто удалить server='cherrypy' от вызова до run(), чтобы использовать сервер wsgiref по умолчанию.

+0

graph_list должен содержать строки, почему? Каким образом тип данных возврата влияет на веб-службу? – Guru

+0

Я имею в виду, что ваше решение работает, но почему я не могу вернуть список целых чисел? – Guru

+0

Бутылка поддерживает следующие возвраты от ваших обратных вызовов/маршрутов: http://bottlepy.org/docs/dev/tutorial.html#generating-content – Joe