Лучший способ создать простой веб-сервис на Python [закрыто]

137

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

Джереми Кантрелл
источник
Это хороший быстрый пример: dreamsyssoft.com/blog/blog.php?/archives/…
Rocky
github.com/pramttl/webipy Я написал этот инструмент, который автоматически преобразует ваши функции Python в конечные точки сети. У него есть некоторые ограничения на определения ваших функций, но это, безусловно, самый быстрый способ создания конечных веб-точек для ваших функций python. Infact webipy использует django, но он автоматически генерирует представления django, необходимые для всех ваших функций python. Вам не нужно писать «веб-код».
Пранджал Миттал

Ответы:

55

Взгляните на werkzeug . Werkzeug начинался как простой набор различных утилит для приложений WSGI и стал одним из самых продвинутых служебных модулей WSGI. Он включает в себя мощный отладчик, полнофункциональные объекты запросов и ответов, HTTP-утилиты для обработки тегов сущностей, заголовки управления кешем, даты HTTP, обработку файлов cookie, загрузку файлов, мощную систему маршрутизации URL-адресов и множество дополнительных модулей, внесенных сообществом.

Он включает в себя множество интересных инструментов для работы с http и имеет то преимущество, что вы можете использовать его с wsgi в разных средах (cgi, fcgi, apache / mod_wsgi или с простым простым сервером python для отладки).

Питер Хоффманн
источник
2
В итоге я использовал для этого werkzeug. Мне нравится, насколько он гибкий. Спасибо за рекомендацию.
Джереми Кантрелл
1
Я пробовал еще три веб-фреймворка, прежде чем дошел до этого. Это первое, с чем я смог работать "из коробки". Отличный рецепт!
BenDundee
26

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' не имеет атрибута 'application'
bortzmeyer 06
1
Веб-сайт вернулся. Вы можете проверить свою версию, поскольку код Тима выглядит правильно.
Чарли Мартин,
1
Я тоже столкнулся с этим. Если вы используете Ubuntu, версия, поставляемая в репозитории 8.10, уже устарела. Скачайте новейшую версию с веб-сайта или используйте easy_install, и вы должны стать золотыми.
Bouvard, 06
согласно webpy.org (официальный сайт web.py) яндекс использует web.py (у них 70 миллионов просмотров страниц в день) .. так что это должно быть эффективно ..
программист
Это именно то, что мне нужно. Просто, по делу и удобно.
GuiSim
15

Самый простой способ получить скрипт 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
Теган Снайдер
1
Дело в том, чтобы запустить приложение без какого-либо дополнительного веб-сервера, такого как apache.
AstraSerg
12

Raw CGI - это своего рода боль, Django - тяжеловес. Существует ряд более простых и легких фреймворков, например CherryPy . Стоит немного осмотреться.

Чарли Мартин
источник
2
+1 для CherryPy. Он идеально подходит, когда вам нужно что-то попроще, чем Django.
Стив Лош,
9

Посмотрите на эталонную реализацию WSGI . Он уже есть в ваших библиотеках Python. Все очень просто.

С.Лотт
источник
Как я уже сказал, мой опыт веб-программирования на Python довольно ограничен, но приложение WSGI можно запускать «автономно», без веб-сервера, такого как apache, верно?
Джереми Кантрелл,
Да. Полностью автономный. Работает отлично. Однако вы не можете использовать порт 80 без Apache или специальных привилегий - но это проблема безопасности ОС.
S.Lott
4

Если вы имеете в виду под «веб-службой» что-то, к чему обращаются другие программы, SimpleXMLRPCServer может вам подойти. Он входит в каждую установку Python, начиная с версии 2.2.

Для простых вещей, доступных человеку, я обычно использую Pythons SimpleHTTPServer, который также поставляется с каждой установкой. Очевидно, вы также можете получить доступ к SimpleHTTPServer с помощью клиентских программ.

Максимум
источник
2

Жизнь проста, если у вас есть хороший веб-фреймворк. Веб-сервисы в Django просты. Определите свою модель, напишите функции просмотра, которые возвращают ваши CSV-документы. Пропустите шаблоны.

С.Лотт
источник
2

Если вы имеете в виду «веб-сервис» в смысле SOAP / WSDL, вы можете посмотреть на Создание WSDL с использованием Python и SOAPpy

че
источник
Я просто имею в виду «веб-сервис» в самом неформальном смысле. Предоставление данных через http, которые будут использоваться другим приложением. Как я уже сказал в вопросе, скорее всего, это будет csv.
Джереми Кантрелл,
WSDL, вероятно, будет наиболее основанным на стандартах ... и это будет для использования ...
Туфир,
1

возможно Twisted http://twistedmatrix.com/trac/

маббит
источник
Я не имею ничего против Twisted, но это именно то, от чего я хотел держаться подальше (тяжелые зависимости).
Джереми Кантрелл,
@ Джереми: Twisted не тяжелый.
nosklo 06
Я согласен, что на первый взгляд это может показаться немного сложным, но я не уверен, что вы имеете в виду под «тяжелыми зависимостями». Насколько мне известно, он использует пакеты из стандартного питона. Внутри модуля много движущихся частей, но для простых вещей вам не нужно так много делать.
mabbit