Найкращий спосіб створити просту веб-службу пітона [закритий]


137

Я використовую python роками, але у мене мало досвіду роботи з веб-програмуванням python. Я хотів би створити дуже простий веб-сервіс, який викриває певну функціональність із існуючого сценарію python для використання в моїй компанії. Це, ймовірно, поверне результати в csv. Який найшвидший спосіб щось підняти? Якщо це вплине на вашу пропозицію, я, швидше за все, додаю цьому більше функціоналу, вниз.


Це показує хороший швидкий зразок: dreamsyssoft.com/blog/blog.php?/archives/…
Triton Man

github.com/pramttl/webipy Я написав цей інструмент, який автоматично перетворює ваші функції python у кінцеві точки веб. Він має деякі обмеження щодо визначень вашої функції, але на сьогоднішній день є найшвидшим способом створення веб-кінцевих точок для ваших функцій python. Infact webipy використовує django, але він автоматично генерує перегляди django, необхідні для всіх ваших функцій python. Вам не потрібно писати жодного "веб-коду".
Pranjal Mittal

Відповіді:


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' object не має атрибута 'application'
bortzmeyer

1
Веб-сайт повернувся. Ви можете перевірити свою версію, оскільки код Тіма виглядає правильно.
Чарлі Мартін

1
Я теж наткнувся на це. Якщо ви використовуєте Ubuntu, версія, яка постачається у сховище 8.10, є досить застарілою. Візьміть новітні з веб-сайту або скористайтеся easy_install, і ви повинні бути золотистими.
бульвар

за даними webpy.org (офіційний веб-сайт web.py) yandex використовує 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
Tegan Snyder

1
Сенс у тому, щоб запустити додаток без будь-якого додаткового веб-сервера на зразок apache.
AstraSerg

12

Сирий CGI - це вид болю, Django - різновид важкої ваги. Існує ряд простіших, легших рамок, наприклад, CherryPy . Варто трохи озирнутися.


2
+1 для CherryPy. Це ідеально підходить, коли хочеться чогось простішого, ніж Джанго.
Стів Лош

9

Подивіться на реалізацію посилань на WSGI . Ви вже маєте його у ваших бібліотеках Python. Це досить просто.


Як я вже говорив, мій досвід роботи з веб-програмуванням python досить обмежений, але додаток WSGI можна запускати "автономно", без веб-сервера на зразок apache, правда?
Джеремі Кантрелл

Так. Повністю автономний. Чудово працює. Однак ви не можете використовувати порт 80 без Apache або спеціальних привілеїв - але це проблема безпеки ОС.
С.Лотт

4

Якщо ви маєте на увазі під "Веб-сервісом" щось, до якого звертаються інші програми SimpleXMLRPCServer, можливо, вам підійде . Він входить до кожної установки Python з версії 2.2.

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


2

Життя є простим, якщо ти маєш гарну веб-структуру. Веб-сервіси в Django прості. Визначте свою модель, запишіть функції перегляду, які повертають ваші документи CSV. Пропустіть шаблони.


2

Якщо ви маєте на увазі "веб-сервіс" у сенсі SOAP / WSDL, ви можете подивитися Створення WSDL за допомогою Python та SOAPpy


Я просто маю на увазі "веб-сервіс" у самому неофіційному розумінні. Надання даних через http, які будуть споживатись іншим додатком. Як я вже говорив у запитанні, швидше за все, це буде csv.
Джеремі Кантрелл

WSDL, мабуть, базується на більшості стандартів ... і це було б для споживання ...
Thufir

1

можливо скручений http://twistedmatrix.com/trac/


Я не маю нічого проти Twisted, але це саме те, що я хотів триматися подалі від (важкі залежності).
Джеремі Кантрелл

@Jeremy: Скручений не важкий.
nosklo

Я погоджуюсь, що це може бути трохи страшним на перший погляд, але я не впевнений, що ви маєте на увазі під «важкими залежностями». Наскільки він використовує пакети зі стандартного python, наскільки я знаю. Всередині модуля є багато рухомих деталей, але для простих речей вам не потрібно так багато робити.
мабіт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.