Лучший способ создать простой веб-сервис на 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.