Лучший способ создать простой веб-сервис на 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.