Я использую Python в течение многих лет, но у меня мало опыта в веб-программировании на Python. Я хотел бы создать очень простой веб-сервис, который предоставляет некоторые функции из существующего скрипта Python для использования в моей компании. Скорее всего, он вернет результаты в формате csv. Какой самый быстрый способ что-то поднять? Если это повлияет на ваше предложение, я, вероятно, добавлю к нему дополнительные функции в будущем.






Жизнь проста, если у вас есть хороший веб-фреймворк. Веб-сервисы в Джанго просты. Определите вашу модель, напишите функции просмотра, которые возвращают ваши CSV-документы. Пропустите шаблоны.
Самый простой способ получить скрипт Python в сети - использовать CGI:
#!/usr/bin/python
print "Content-type: text/html"
print
print "<p>Hello world.</p>"
Поместите этот код в сценарий, который находится в каталоге CGI вашего веб-сервера, сделайте его исполняемым и запустите. Модуль cgi имеет ряд полезных утилит, когда вам нужно принять параметры от пользователя.
При использовании этого метода убедитесь, что обработчик настроен соответствующим образом для сценариев python в Apache, например: AddHandler cgi-script .cgi .pl .py
Дело в том, чтобы запустить приложение без какого-либо дополнительного веб-сервера, такого как apache.
web.py, вероятно, самый простой веб-фреймворк. «Голая» CGI проще, но когда дело доходит до создания службы, которая действительно что-то делает, вы полностью предоставлены сами себе.
"Привет мир!" согласно web.py не намного длиннее, чем простая версия CGI, но она добавляет сопоставление URL-адресов, различие HTTP-команд и синтаксический анализ параметров запроса бесплатно:
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'world'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()
Ах да, web.py кажется отличным. На данный момент веб-сайт <webpy.org> сообщает: 500 - Внутренняя ошибка сервера. В противном случае наш код не работает для меня: ... app = web.application (urls, globals ()) AttributeError: объект 'module' не имеет атрибут 'приложение'
Веб-сайт вернулся. Вы можете проверить свою версию, так как код Тима выглядит правильно.
Я тоже с этим столкнулся. Если вы используете Ubuntu, версия, поставляемая в репозитории 8.10, уже устарела. Скачайте новейшую версию с веб-сайта или используйте easy_install, и вы должны стать золотыми.
согласно webpy.org (официальный веб-сайт web.py) яндекс использует web.py (у них 70 миллионов просмотров страниц в день) .. поэтому он должен быть эффективным ..
Это именно то, что мне было нужно. Простой, понятный и простой в использовании.
Raw CGI - это своего рода боль, Django - своего рода тяжеловес. Существует ряд более простых и легких фреймворков, например CherryPy. Стоит немного осмотреться.
+1 для CherryPy. Он идеально подходит, когда вам нужно что-то попроще, чем Django.
Взгляните на Werkzeug. Werkzeug начинался как простой набор различных утилит для приложений WSGI и стал одним из самых продвинутых служебных модулей WSGI. Он включает в себя мощный отладчик, полнофункциональные объекты запросов и ответов, утилиты HTTP для обработки тегов сущностей, заголовки управления кешем, даты HTTP, обработку файлов cookie, загрузку файлов, мощную систему маршрутизации URL и множество дополнительных модулей, внесенных сообществом.
Он включает в себя множество интересных инструментов для работы с http и имеет то преимущество, что вы можете использовать его с wsgi в разных средах (cgi, fcgi, apache / mod_wsgi или с простым простым сервером python для отладки).
В итоге я использовал для этого werkzeug. Мне нравится, насколько он гибкий. Спасибо за рекомендацию.
Я пробовал еще три веб-фреймворка, прежде чем дошел до этого. Это первое, с чем я смог работать "из коробки". Отличный рецепт!
If you mean "web service" in SOAP/WSDL sense, you might want to look at Создание WSDL с использованием Python и SOAPpy
Я просто имею в виду «веб-сервис» в самом неформальном смысле. Предоставление данных через http, которые будут использоваться другим приложением. Как я уже сказал в вопросе, скорее всего, это будет csv.
WSDL, вероятно, будет наиболее основанным на стандартах ... и это будет для использования ...
возможно скрученный http://twistedmatrix.com/trac/
Я не имею ничего против Twisted, но это именно то, от чего я хотел держаться подальше (тяжелые зависимости).
@ Джереми: Twisted не тяжелый.
Я согласен, что на первый взгляд это может показаться немного сложным, но я не уверен, что вы имеете в виду под «тяжелыми зависимостями». Насколько мне известно, он использует пакеты из стандартного питона. Внутри модуля много движущихся частей, но для простых вещей вам не нужно так много делать.
Посмотрите на Эталонная реализация WSGI. Он уже есть в ваших библиотеках Python. Все очень просто.
Как я уже сказал, мой опыт веб-программирования на Python довольно ограничен, но приложение WSGI можно запускать «автономно», без веб-сервера, такого как apache, верно?
Да. Полностью автономный. Работает отлично. Однако вы не можете использовать порт 80 без Apache или специальных привилегий - но это проблема безопасности ОС.
Если вы имеете в виду «веб-службу», что-то, к чему обращаются другие программы, SimpleXMLRPCServer может быть для вас правильным. Он входит в каждую установку Python, начиная с версии 2.2.
Для простых вещей, доступных человеку, я обычно использую Pythons SimpleHTTPServer, который также поставляется с каждой установкой. Очевидно, вы также можете получить доступ к SimpleHTTPServer с помощью клиентских программ.
Это хороший быстрый пример: dreamsyssoft.com/blog/blog.php?/archives/…